使用Node.js从异步函数返回列表

阿什·布林格

我有以下代码:

var fs = require("fs");

function getMediaList(){
    var media_copy_list, line_list;
    media_copy_list = [];

    fs.readFile("input.csv", function(err, data) {

      line_list = data.toString('utf-8').trim().split('\n');
      return line_list.forEach(function(file_line) {
        var output_path, source_path, split_list;
        if (file_line.length) {
          split_list = file_line.split(';');
          console.log(split_list[0]);
          if (split_list.length >= 2) {
            source_path = split_list[0].toString('utf-8').trim();
            output_path = split_list[1].toString('utf-8').trim();
            media_copy_list.push({
              source: source_path,
              destination: output_path
            });
          }
        }
      });
    });
}

您会看到我正在用以下方法填充列表:

media_copy_list.push({
  source: source_path,
  destination: output_path
});

我想做的就是在完成input.csv文件读取后返回此列表

如果我同步读取文件,则没有任何问题(只需调用return media_copy_list)。但是在这种情况下,我不知道。

我听说过,async.parallel但真的不知道如何申请。

范例input.csv

第一部分;第二部分

测试/测试2;无论/示例

亚尼克·罗雄(Yanick Rochon)

只需将代码包装在Promise中,然后在完成后就解决它。有些人建议使用回调,其作用几乎相同,但是现在不建议使用此模式。您应该真正使用诺言。

var fs = require("fs");

function getMediaList(file){
  return new Promise(function (resolve, reject) {
    fs.readFile(file, 'utf-8', function(err, data) {
      if (err) {
        return reject(err);
      }

      resolve(data.split('\n').reduce(function(media_copy_list, file_line) {
        var output_path;
        var source_path;
        var split_list;

        file_line = file_line.trim();

        if (file_line.length) {
          split_list = file_line.split(';');
          console.log(split_list[0]);

          if (split_list.length >= 2) {
            source_path = split_list[0].toString('utf-8').trim();
            output_path = split_list[1].toString('utf-8').trim();
            media_copy_list.push({
              source: source_path,
              destination: output_path
            });
          }
        }

        return media_copy_list;
      }, []));
    });
  });
}

然后,使用

getMediaList('input.csv').then(function (mediaList) {
  // ...
}).catch(function (err) {
  console.error(err.stack);
});

注意:从Node 4.2+开始,bluebird,Q等都是不必要的。除非您使用的是早期版本的Node,否则请尽量避免使用它们。海事组织。

Promise鼓励使用s的原因是因为Node将实现async / await,这将允许您调用此完全相同的函数,例如:

var mediaList = await getMediaList('input.csv');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.JS函数返回异步回调函数的值

来自分类Dev

从Node.js中的异步函数返回值

来自分类Dev

填充异步函数后返回数组 - Node.js

来自分类Dev

如何从 node.js 中的异步函数返回值

来自分类Dev

node.js:将异步函数列表应用于列表列表的每个项目

来自分类Dev

使用异步与 mongoDB 时如何修复 node.js 返回 {}

来自分类Dev

在Node.js中使用异步瀑布进行函数迭代

来自分类Dev

Node.js:从内部带有异步调用的函数返回值

来自分类Dev

Node.js:从内部带有异步调用的函数返回值

来自分类Dev

是否可以从 node.js 中的异步函数返回值?

来自分类Dev

Node JS +异步返回结果加入数据

来自分类Dev

使用内部函数返回的异步数据返回外部函数的promise

来自分类Dev

在Node.js中,如何使用node-seq顺序地链接异步函数?

来自分类Dev

使用异步命令从函数返回值

来自分类Dev

node.js异步系列函数的参数

来自分类Dev

Node.js中的异步函数

来自分类Dev

如何从函数返回数据并在Node.js中使用

来自分类Dev

使用异步库从异步函数获取返回值

来自分类Dev

如何将 net.socket 数据从 AWS Lambda Node.js 8.10 异步函数返回到 AWS API 网关?

来自分类Dev

在node.js中使用异步瀑布

来自分类Dev

在node.js中使用异步模块

来自分类Dev

在node.js中使用异步模块

来自分类Dev

Node.js 使用 Promise.all 返回异步调用?

来自分类Dev

Node.js:您可以在流中使用异步函数吗?

来自分类Dev

Await仅在使用Node.js的异步函数中有效

来自分类Dev

使用异步node.js函数控制流和错误处理

来自分类Dev

Node.js同步返回多个异步产量的结果

来自分类Dev

Node.js同步返回多个异步产量的结果

来自分类Dev

使用HttpClient时避免从异步函数返回Type Task <Object>

Related 相关文章

  1. 1

    Node.JS函数返回异步回调函数的值

  2. 2

    从Node.js中的异步函数返回值

  3. 3

    填充异步函数后返回数组 - Node.js

  4. 4

    如何从 node.js 中的异步函数返回值

  5. 5

    node.js:将异步函数列表应用于列表列表的每个项目

  6. 6

    使用异步与 mongoDB 时如何修复 node.js 返回 {}

  7. 7

    在Node.js中使用异步瀑布进行函数迭代

  8. 8

    Node.js:从内部带有异步调用的函数返回值

  9. 9

    Node.js:从内部带有异步调用的函数返回值

  10. 10

    是否可以从 node.js 中的异步函数返回值?

  11. 11

    Node JS +异步返回结果加入数据

  12. 12

    使用内部函数返回的异步数据返回外部函数的promise

  13. 13

    在Node.js中,如何使用node-seq顺序地链接异步函数?

  14. 14

    使用异步命令从函数返回值

  15. 15

    node.js异步系列函数的参数

  16. 16

    Node.js中的异步函数

  17. 17

    如何从函数返回数据并在Node.js中使用

  18. 18

    使用异步库从异步函数获取返回值

  19. 19

    如何将 net.socket 数据从 AWS Lambda Node.js 8.10 异步函数返回到 AWS API 网关?

  20. 20

    在node.js中使用异步瀑布

  21. 21

    在node.js中使用异步模块

  22. 22

    在node.js中使用异步模块

  23. 23

    Node.js 使用 Promise.all 返回异步调用?

  24. 24

    Node.js:您可以在流中使用异步函数吗?

  25. 25

    Await仅在使用Node.js的异步函数中有效

  26. 26

    使用异步node.js函数控制流和错误处理

  27. 27

    Node.js同步返回多个异步产量的结果

  28. 28

    Node.js同步返回多个异步产量的结果

  29. 29

    使用HttpClient时避免从异步函数返回Type Task <Object>

热门标签

归档