【问题标题】:Callback Hell - Node.js deal with loops that contain async functions [duplicate]Callback Hell - Node.js 处理包含异步函数的循环
【发布时间】:2017-08-05 00:55:16
【问题描述】:

假设我们有以下伪代码:

    forLoop() {
        forLoop() {
            asyncFunction() {
                return of AsyncFunction
            }
            asyncFunction() {
                return of AsyncFunction
            }
        }
    }
//Execute this part when all asyncs are done from previous loops.

我知道这不是有效的代码,但如何在 Node.js 中处理

【问题讨论】:

  • promise 会帮助你。为您解答promise.all
  • 是的,如果您只是想启动大量异步操作,然后在它们全部完成后执行某些操作,Promise.all 是您的最佳选择。
  • 看看 async.js
  • 要获得真正的答案,您必须向我们展示真实的代码。 node.js 中的异步函数是非阻塞的,所以循环所做的只是启动一大堆异步操作,它不会对它们进行排序或等待它们。如果你想让它们排序(运行 A,等待 A 完成,然后运行 ​​B,等等),你不能使用这样的普通循环。请向我们展示您对真实代码的实际问题,因为适当的解决方案取决于真实代码中的具体细节。书面的这个问题无法回答。

标签: node.js callback


【解决方案1】:

你可以使用 async 包,这个包有 async.forEach 方法,可以在这里使用。

async.forEach(Object.keys(dataObj), function (item, callback){ 
    console.log(item); // print the key

    // tell async that that particular element of the iterator is done
    callback(); 

}, function(err) {
    console.log('iterating done');
});  

您可以在异步 foreach 循环中使用异步 foreach 循环。

【讨论】:

    猜你喜欢
    • 2018-10-28
    • 2012-12-27
    • 1970-01-01
    • 2012-01-24
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2016-04-29
    相关资源
    最近更新 更多