这个问题已经在这里有了答案: > How do I access previous promise results in a .then() chain? 15个
我需要链接一些异步动作.我正在尝试编写使用express的Parse.com云代码. (我认为快递是承诺支持的来源).我明白了为什么诺言很有价值,但是我仍然不确定几件事.第一个是如何收集顺序操作的结果.下面的代码说明:
function doAsnychThingsInSequence(params) {
return doThing0(params).then(function(resultOfThing0) {
// thing1 depends on resultOfThing0
doThing1(resultOfThing0);
}).then(function(resultOfThing1) {
// here is where I am confused.
// thing2 depends on the results of thing0 and thing1
doThing2(resultOfThing0 /* out of scope?? */, resultOfThing1);
}, function(error) {
// handle error
});
}
在thing1完成之后,我需要两个操作的结果.我想我可以在函数顶部分配一个变量,并将其分配给第一个回调的第一个结果,这是正确的方法吗?我想,我困惑的核心是第二个问题.
return doThing0(params0).then(function(resultOfThing0) {
doThing1(resultOfThing0);
// what does return mean here? does what I return here relate to the
// parameters of the next function?
return "foo";
}).then(function(param) {
// what is in param? is it "foo"?
}, function(error) {
});
解决方法:
可以将承诺想象为流处理:一个函数获取输入,对其进行处理,然后将其传递给链中的下一个函数.
因此,如果您需要进一步传递输入(用于链)参数,则应将其包含在其中
输出数据,以便链中的下一个可以使用它们:
function doThing1(params1) {
...
return [params1, result1];
}
function doThing2(params1, params2) {
...
}
正如您已经提到的,您可以在doThing1和doThing2之外使用一些变量,但这会使这些函数处于有状态状态,这可能导致各种副作用.通常不希望异步处理.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。