Node.js / Q:链接承诺按顺序

Azhenagri独角兽

我想做一些非常简单的事情,但我一点都不懂...

var Q = require('q');

var funcs = ["first", "second", "third", "fourth"];

function main(){

// really don't know how to chain sequentially here ...
    var result = Q();

    funcs.forEach(function (f) {
        result = treat(f).then(f);
    });

}

function treat(t){

    var deferred = Q.defer();

    setTimeout(function(){
        deferred.resolve("treated "+ t); 
    },2000);

    return deferred.promise;
}

main();

我希望依次对funcs数组的每个元素进行“处理”,然后输出如下所示:

treated first
//2 seconds later
treated second
//2 seconds later
treated third
//2 seconds later
treated fourth

我无法做到这一点:(应该很简单,我什么都没发现:(

列昂尼德·贝沙斯特尼

从您的示例来看,我认为您已经看到了Sequences作为Q自述文件的一部分,但未能理解它。

当每个函数的输出作为输入传递给下一个函数时,原始示例使用“瀑布”模型:

var funcs = [foo, bar, baz, qux];

var result = Q(initialVal);
funcs.forEach(function (f) {
    result = result.then(f);
});
return result;

但是您只想按顺序执行我们的所有功能,因此您只需将每个功能与其变量绑定即可:

var args = ["first", "second", "third", "fourth"];

var result = Q();
args.forEach(function (t) {
    result = result.then(treat.bind(null, t));
});
return result;

在我的示例中,treat函数将被顺序调用4次,并且resultpromise将使用最新treat调用的值来解决(所有先前调用的结果都将被忽略)。

诀窍是该.then方法接受一个处理程序,该处理程序将在解决当前的Promise后返回新的Promise。因此,您应该传递给.then函数,该函数应在执行链的下一步中调用。treat.bind(null, t)treat函数与attribute绑定t换句话说,它返回一个新函数,它将调用treatt作为其第一个参数传递

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js Q承诺then()链接不会等待

来自分类Dev

Node.js Q承诺多个参数

来自分类Dev

使Node.js代码按顺序运行

来自分类Dev

Node.js Q承诺forEach返回未定义

来自分类Dev

Node.js Q承诺forEach返回未定义

来自分类Dev

Node Js链接响应

来自分类Dev

使用Q Promises在node.js中链接GET请求

来自分类Dev

Node js中的条件承诺

来自分类Dev

Node.js对象承诺

来自分类Dev

Node JS:如何承诺 For 循环

来自分类Dev

在Node.js中按顺序解析JSON

来自分类Dev

NODE.JS 按特定顺序执行代码

来自分类Dev

Node js中的语句顺序

来自分类Dev

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

来自分类Dev

使用Q使node.js fs.readFile作为承诺的操作

来自分类Dev

node.js Q.all在函数调用自身方面做出承诺

来自分类Dev

带有Express.js的Node + Q-有序的承诺

来自分类Dev

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

来自分类Dev

node.js(express)链接CSS / JS

来自分类Dev

node.js导出的承诺链未与Web api回调顺序运行

来自分类Dev

Node.js承诺使用mongoskin

来自分类Dev

Node.js中的承诺蓝鸟的麻烦

来自分类Dev

node.js-控制承诺队列

来自分类Dev

Node JS问题,并承诺在完成之前返回

来自分类Dev

未兑现的承诺-Express Node JS

来自分类Dev

Node.js承诺使用mongoskin

来自分类Dev

Node.js承诺:获取并保存结果

来自分类Dev

Node JS无法解析承诺数组

来自分类Dev

蓝鸟的node.js承诺循环架构