gpt4 book ai didi

javascript - Bluebird promise 多层次

转载 作者:行者123 更新时间:2023-12-02 14:31:17 25 4
gpt4 key购买 nike

我正在努力弄清楚如何异步执行多个级别的 promise 。我已经搜索了文档,但大多数 promise 库都让您等待所有 promise 执行一些逻辑或一个然后下一个。我需要这两方面的一个方面。我写了一个关于我想要实现的目标的快速演示。

这背后的总体思路是我有 4 个需要调用的函数。 A和B可以同时被调用。 C 依赖于 B 的返回。然后我需要所有三个(A,B,C)来计算 D。我将如何构建它?

我尝试在这里画出一般流程图:

A ->   -> D
B -> C ->
<小时/>

示例代码:

var bluebird = require('bluebird');

function a(){
setTimeout(function(){
console.log('a called');
return 'a';
},1000);
}

function b(){
setTimeout(function(){
console.log('b called');
return 'b message';
},1000);
}

function c(bMessage){
setTimeout(function(){
console.log('c called');
return 'c set in motion';
},1000);
}

function d(aMessage, bMessage, cMessage){
setTimeout(function(){
console.log('prmoises: called: ' + aMessage + bMessage + cMessage);
return 'this the end';
},1000);
}

function test(){
// what goes here?
}

test();

最佳答案

returning promises from your asynchronous functions 开头而不是仅仅调用 setTimeout 。最好直接删除 setTimeout完全并使用<a href="http://bluebirdjs.com/docs/api/promise.delay.html" rel="noreferrer noopener nofollow">Promise.delay(…)</a>.then(…) .

然后使用 then对于单个依赖项和 Promise.join 对于多个。不要构建长链,将您需要的每个结果的 promise 存储在变量中:

function test(){
var aPromise = a();
var bPromise = b();
var cPromise = bPromise.then(c);
return Promise.join(aPromise, bPromise, cPromise, d);
}

另请参阅相关问题 How do I access previous promise results in a .then() chain? .

关于javascript - Bluebird promise 多层次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37801419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com