【问题标题】:async.parallel or Q.all which I've to use? How? + NodeJS我必须使用的 async.parallel 或 Q.all ?如何? + 节点JS
【发布时间】:2019-01-29 18:26:03
【问题描述】:

您好我有以下代码,我想使用async.parallelQ.all函数来并行执行函数调用。

我该用还是不用请回复,你的回答都是赞赏。

function getPath(x){
    return (x/100);  // It's demo here it's some big logic exist.
}

var array = [4,56,2,3,34,45,65,23,23,12,12,23,34,43,54,54];  // lack of data in array
var resultArr = [];
array.forEach(function(val){
    resultArr.push(getPath(val));
})

// After 5-8 sec, I got results. 

我可以使用 async.parellelQ.all 执行相同的操作吗?

【问题讨论】:

  • q.all,或者更确切地说是 Promise.all,用 async/await 更好
  • @Endless 怎么样?您能否指导我如何将它们用于关于场景。
  • 给你一个简单的例子

标签: node.js promise async-await q async.js


【解决方案1】:

Q 和 Promise 可以混合使用,您甚至可以 await 与 A+ 兼容的 Q Promise。这是一个使用 Promise 的示例和另一个使用 async/await 的示例

function readDir(x) {
    return new Promise(function(rs){
        setTimeout(rs, x, x)
    })
}

function getPath(x) {
    return readDir(x).then(function(val){
         return val / 100
    })
}

var array = [4,56,2,3,34,45,65,23,23,12,12,23,34,43,54,54];  // lack of data in array
var resultArr = array.map(function(val) {
    return getPath(val);
});

// Q.all is the equivulant of Promise.all
Promise.all(resultArr).then(console.log)

function readDir(x) {
    return new Promise(function(rs){
        setTimeout(rs, x, x)
    })
}

async function getPath(x) {
    var val = await readDir(x)
    return val / 100;
}

async function init() {
  var array = [4,56,2,3,34,45,65,23,23,12,12,23,34,43,54,54];  // lack of data in array
  var resultArr = array.map(function(val) {
      return getPath(val);
  });
  
  var result = await Promise.all(resultArr);
  console.log(result)
}

init()

node v10 附带 fs.promises,非常简洁。

async function getPath(x) {
   const files = await fs.promises.readdir(x)
   console.log(files)
}

所有异步函数都返回一个承诺

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 2021-05-07
    • 2018-03-08
    • 2014-06-09
    • 2018-08-23
    • 1970-01-01
    • 2020-07-03
    • 2015-03-08
    • 2022-12-17
    相关资源
    最近更新 更多