当前位置:  开发笔记 > 编程语言 > 正文

如何在循环内完成异步函数后调用函数?

如何解决《如何在循环内完成异步函数后调用函数?》经验,为你挑选了1个好方法。



1> Benjamin Gru..:

我在这里使用Bluebird的承诺.注意代码的意图是如何清晰的,没有嵌套.

首先,让我们宣传 hgetall呼叫和客户端 -

var client = Promise.promisifyAll(client);

现在,让我们用promises编写代码,.then而不是用节点回调和聚合.map.什么.then是异步操作完成的信号..map获取一系列内容并将它们全部映射到异步操作,就像您的hgetall调用一样.

请注意Bluebird如何Async为promisifed方法添加(默认情况下)后缀.

exports.awesomeThings = function(req, res) {
    // make initial request, map the array - each element to a result
    return client.lrangeAsync("awesomeThings", 0, -1).map(function(awesomeThing) {
       return client.hgetallAsync("awesomething:" + awesomeThing);
    }).then(function(things){ // all results ready 
         console.log(things); // log them
         res.send(JSON.stringify(things)); // send them
         return things; // so you can use from outside
    });
};


很高兴我能帮助你.Promise是一个非常强大的抽象,可以很好地简化代码.它们还内置了可调试性 - 如果上面的任何代码有错误 - 你会知道蓝鸟的承诺.它们很好地链接,它们很好地组合并包含您实际需要的并发原语.从EcmaScript 6开始,它们也是JavaScript的一部分 - 下一个标准,因此假设使用它们的代码是非常兼容的.
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有