如何在Node JS中将异步转换为同步

王文森

我是nodejs的菜鸟,现在我在node js中出现了关于异步和同步的问题。

这是我的代码:

var time_begin = Date.now();
console.log("begin time:" + time_begin);

arr_a = ['a', 'b', 'a', 'b', 'a', 'b']

async function iterTrans (arr_a) {

    var txs_arr_tmp = [];
    for(let aInfo of arr_a) {
        var fs = require('fs');
        if (aInfo == "a") {
            fs.readFile("./debug.json", function (error_file, data_file) {
                if (error_file) {
                    console.log(error_file)
                } else {
                    txs_arr_tmp.push("a");
                }
            });

        } else {
            txs_arr_tmp.push("b");
        }
    }
    return txs_arr_tmp;
}

iterTrans(arr_a).then((txs_arr_tmp) => {

    var content_str = JSON.stringify(txs_arr_tmp);
    console.log(content_str);
})

我希望控制台可以打印:

["a","b","a","b","a","b"]

但是我实际上得到了:

["b","b","b"]

我已经学习并尝试了一些有关从异步到同步的方法,但没有成功,而且我必须在readFile中使用异步方法。

那么如何获得[“ a”,“ b”,“ a”,“ b”,“ a”,“ b”]?谁能给我一些建议?

非常感谢!

帕特里克·罗伯茨

这是我编写函数的方法。由于您的Node.js的版本不具备的支持fs.promisesAPI,你可以使用util.promisify()转换fs.readFile()从回调API的承诺API,然后使用Array.prototype.map()创建承诺的数组,并awaitreadFile()与并行调用Promise.all()

const fs = require('fs');
const util = require('util');
const readFile = util.promisify(fs.readFile);

const time_begin = Date.now();
console.log("begin time:" + time_begin);

const arr_a = ['a', 'b', 'a', 'b', 'a', 'b'];

async function iterTrans (arr_a) {
  // array map allows parallel asynchronicity
  const txs_arr_tmp_promises = arr_a.map(async aInfo => {
    // use early return (to avoid nesting large blocks inside if statements)
    if (aInfo !== 'a') return 'b';

    // let await throw here if file error occurs
    const data_file = await readFile('./debug.json');
    return 'a';
  });

  return Promise.all(txs_arr_tmp_promises);
}

iterTrans(arr_a).then(txs_arr_tmp => {
  const content_str = JSON.stringify(txs_arr_tmp);
  console.log(content_str);
}).catch(error => {
  // handle errors here
  console.log(error);
});

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Python 中将同步转换为异步

来自分类Dev

Node js异步转换为同步

来自分类Dev

如何在C#4.5中将同步4.0转换为异步

来自分类Dev

在Node.js中将异步代码转换为Q /承诺代码

来自分类Dev

如何将同步ajax转换为异步?

来自分类Dev

如何将void同步方法转换为异步方法?

来自分类Dev

如何在node.js中将JSON数组转换为BLOB类型

来自分类Dev

如何在Node.js中将字符串转换为变量名?

来自分类Dev

如何在node.js中将HTML页面转换为纯文本?

来自分类Dev

如何在Node.js中将大十六进制值转换为整数?

来自分类Dev

如何在Node.js中将字符串转换为Uint8Array类型

来自分类Dev

如何在Node.js / Express / MongoDB应用程序中将Markdown转换为HTML

来自分类Dev

如何在node.js中将JSON数组转换为BLOB类型

来自分类Dev

如何在 Javascript (Node.js) 中将 .jl 文件转换为 .json 文件

来自分类Dev

如何在Node环境中将BLOB转换为PDF文件?

来自分类Dev

如何在JS中将毫秒转换为日期?

来自分类Dev

如何在angular js中将double转换为int?

来自分类Dev

如何在js中将时间转换为deg或rad?

来自分类Dev

如何在JS中将json转换为树数组?

来自分类Dev

如何在react js中将数组转换为键值对?

来自分类Dev

如何在C#中将异步的返回类型Task <DataView>转换为DataView

来自分类Dev

编译器如何在异步方法中将返回值转换为返回 Task<value>?

来自分类Dev

如何在Node.js MongoDB本机驱动程序中将字符串转换为ObjectId?

来自分类Dev

在Node JS中将JSON对象转换为Excel文件时,如何在Excel文件中存储Javascript数组元素?

来自分类Dev

如何在 node.js 中将 XML 转换为 JSON 而没有来自 xml 文件的前两个元素?

来自分类Dev

如何在 node.js 中将日期时间:1518427800 转换为 hh:mm:ss dd/mm/yyyy?

来自分类Dev

Node.js同步与异步

来自分类Dev

如何在Node.js和MongoDb中的javascript中混合同步和异步代码

来自分类Dev

如何在Node.js中执行一系列同步和异步功能

Related 相关文章

  1. 1

    如何在 Python 中将同步转换为异步

  2. 2

    Node js异步转换为同步

  3. 3

    如何在C#4.5中将同步4.0转换为异步

  4. 4

    在Node.js中将异步代码转换为Q /承诺代码

  5. 5

    如何将同步ajax转换为异步?

  6. 6

    如何将void同步方法转换为异步方法?

  7. 7

    如何在node.js中将JSON数组转换为BLOB类型

  8. 8

    如何在Node.js中将字符串转换为变量名?

  9. 9

    如何在node.js中将HTML页面转换为纯文本?

  10. 10

    如何在Node.js中将大十六进制值转换为整数?

  11. 11

    如何在Node.js中将字符串转换为Uint8Array类型

  12. 12

    如何在Node.js / Express / MongoDB应用程序中将Markdown转换为HTML

  13. 13

    如何在node.js中将JSON数组转换为BLOB类型

  14. 14

    如何在 Javascript (Node.js) 中将 .jl 文件转换为 .json 文件

  15. 15

    如何在Node环境中将BLOB转换为PDF文件?

  16. 16

    如何在JS中将毫秒转换为日期?

  17. 17

    如何在angular js中将double转换为int?

  18. 18

    如何在js中将时间转换为deg或rad?

  19. 19

    如何在JS中将json转换为树数组?

  20. 20

    如何在react js中将数组转换为键值对?

  21. 21

    如何在C#中将异步的返回类型Task <DataView>转换为DataView

  22. 22

    编译器如何在异步方法中将返回值转换为返回 Task<value>?

  23. 23

    如何在Node.js MongoDB本机驱动程序中将字符串转换为ObjectId?

  24. 24

    在Node JS中将JSON对象转换为Excel文件时,如何在Excel文件中存储Javascript数组元素?

  25. 25

    如何在 node.js 中将 XML 转换为 JSON 而没有来自 xml 文件的前两个元素?

  26. 26

    如何在 node.js 中将日期时间:1518427800 转换为 hh:mm:ss dd/mm/yyyy?

  27. 27

    Node.js同步与异步

  28. 28

    如何在Node.js和MongoDb中的javascript中混合同步和异步代码

  29. 29

    如何在Node.js中执行一系列同步和异步功能

热门标签

归档