如何在Node.js中处理异步函数

约翰·郑

我正在使用Node将.csv文件预处理.json为使用CSVTOJSONnpm包的文件。

我想等待解析完成,然后启动将上传过程上传到数据库。

我发现Node需要链接带有回调的函数才能异步执行它们。

但是我不知道如何应用到我的程序中。

这是代码

// 1. Read *.csv file + Parse fields and escape; @dir "raw_data" =>  @dir "processed"
fs.readdir(rawDataPath, function (err, files) {
  if (err) return console.log("Unable to scan raw_data : " + err);

  console.log("Processing csv files to JSON...");
  console.log("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");

  files.forEach(function (file) {
    console.log(`CSV ${file.split(".")[0]} being converted...`);

    csv({ ignoreEmpty: true })
      .fromFile("raw_data/" + file)
      .then((jsonObj) => {
        // stringify JSON Object
        var jsonContent = JSON.stringify(jsonObj);

        fs.writeFile(
          `processed_data/${file.split(".")[0]}.json`,
          jsonContent,
          "utf8",
          function (err) {
            if (err) {
              console.log(
                "An error occured while writing JSON Object to File."
              );
              return console.log(err);
            }

            console.log(
              `${file} successfully converted to ${file.split(".")[0]}.json`
            );
          }
        );
      });
  });
});

// 2. Upload to Cloud Firestore
fs.readdir(processedDataPath, function (err, files) {
  if (err) return console.log("Unable to scan processed_data : " + err);

  files.forEach(function (file) {
    var quiz = require("./processed_data/" + file);

    console.log(`Collection ${file.split(".")[0]} being updated...`);

    quiz.forEach(function (obj) {
      firestore
        .collection(`${file.split(".")[0].toUpperCase()}`)
        .doc(obj.id)
        .set(obj)
        .then(function (docRef) {
          console.log(
            `Document ${obj.id} successfully uploaded to Cloud Firestore!`
          );
        })
        .catch(function (error) {
          console.error("Error adding document: ", error);
        });
    });
  });
});
鲁德拉普拉萨德·达斯(Rudraprasad Das)

有多种方法可以处理Javascript的异步特性。我将以fs.readFile()一个简单的例子为例。这些是一些方法-

  1. 回调-将函数作为参数传递给异步任务完成后调用。
fs.readFile('./some-file.txt', (err, res) => {
  if (err) {                   // err is null if success
    return console.log(err);   // handle error
  }
  console.log(res);            // handle success
});
  1. 承诺-这是Javascript中的全局可用对象,用于以延迟方式处理异步任务。它还具有链接多个promise的功能。
fs.promises.readFile('./some-file.txt').then((res) => {
  console.log(res);            // handle success
}).catch((err) => {            // only gets executed if there is an error
  console.log(err);            // handle error
});

链接-

fs.promises.readFile('./some-1.txt').then((res) => {
  return fs.promises.readFile('./some-2.txt');            
  // handle success - 1
}).then((res) => {
  return fs.promises.readFile('./some-3.txt');            
  // handle success - 2
}).then((res) => {            
  // handle success - 3
}).catch((err) => { 
  console.log(err);
  // handle error            
});
  1. 异步/等待-这是一种更简单的处理承诺的方法,并在ES2017中引入。另外,请注意,Async / Await仅适用于诺言返回功能。
const main = async () => {
  try {
    const res = await fs.promises.readFile('./some-file.txt');
    console.log(res)
    // handle success
  } catch(err) {
    console.log(err);
    // handle error
  }
}

进一步阅读-

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Node.js中处理异步函数

来自分类Dev

如何在 redux-observable 中处理异步函数?

来自分类Dev

如何在Node.js模块中处理异步回调?

来自分类Dev

如何在保留顺序的同时异步处理Node.js中的流事件?

来自分类Dev

如何在Node.js模块中处理异步回调?

来自分类Dev

如何在node.js中创建自定义异步函数?

来自分类Dev

Node.js中的异步函数

来自分类Dev

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

来自分类Dev

如何在Node.JS中编写异步While循环

来自分类Dev

如何在node.js中创建异步方法链?

来自分类Dev

如何在异步函数中添加 sequlize.js 事务

来自分类Dev

在Node.js中的事件处理程序中异步等待

来自分类Dev

在Node.js中处理异步数据库

来自分类Dev

如何在Node.js中处理XHR Blob帖子

来自分类Dev

如何在Node.js环境中处理用户代理?

来自分类Dev

如何在node.js中处理多个imap连接?

来自分类Dev

如何在Node.js中处理与集群的TCP连接

来自分类Dev

如何在Node.js中处理不同的文件类型

来自分类Dev

即使等待位于 Node.js 中的异步函数中,如何修复“await 仅在异步函数中有效”?

来自分类Dev

如何使函数等待节点js中的异步函数解析?

来自分类Dev

如何在Actix-web中的WebSocket处理程序中正确调用异步函数

来自分类Dev

如何在Node.js的while循环中处理异步操作?

来自分类Dev

如何在非异步函数中调用异步函数

来自分类Dev

如何在JavaFX中处理Node焦点

来自分类Dev

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

来自分类Dev

如何在匿名函数中应用node.js REPL?

来自分类Dev

如何在node.js的同步函数中捕获错误?

来自分类Dev

如何在回调函数Node JS中打破for循环

来自分类Dev

如何在Node.JS的多行中写入函数的输出

Related 相关文章

  1. 1

    如何在Node.js中处理异步函数

  2. 2

    如何在 redux-observable 中处理异步函数?

  3. 3

    如何在Node.js模块中处理异步回调?

  4. 4

    如何在保留顺序的同时异步处理Node.js中的流事件?

  5. 5

    如何在Node.js模块中处理异步回调?

  6. 6

    如何在node.js中创建自定义异步函数?

  7. 7

    Node.js中的异步函数

  8. 8

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

  9. 9

    如何在Node.JS中编写异步While循环

  10. 10

    如何在node.js中创建异步方法链?

  11. 11

    如何在异步函数中添加 sequlize.js 事务

  12. 12

    在Node.js中的事件处理程序中异步等待

  13. 13

    在Node.js中处理异步数据库

  14. 14

    如何在Node.js中处理XHR Blob帖子

  15. 15

    如何在Node.js环境中处理用户代理?

  16. 16

    如何在node.js中处理多个imap连接?

  17. 17

    如何在Node.js中处理与集群的TCP连接

  18. 18

    如何在Node.js中处理不同的文件类型

  19. 19

    即使等待位于 Node.js 中的异步函数中,如何修复“await 仅在异步函数中有效”?

  20. 20

    如何使函数等待节点js中的异步函数解析?

  21. 21

    如何在Actix-web中的WebSocket处理程序中正确调用异步函数

  22. 22

    如何在Node.js的while循环中处理异步操作?

  23. 23

    如何在非异步函数中调用异步函数

  24. 24

    如何在JavaFX中处理Node焦点

  25. 25

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

  26. 26

    如何在匿名函数中应用node.js REPL?

  27. 27

    如何在node.js的同步函数中捕获错误?

  28. 28

    如何在回调函数Node JS中打破for循环

  29. 29

    如何在Node.JS的多行中写入函数的输出

热门标签

归档