Javascript 如何向承诺链动态添加新承诺
我想创建承诺链,然后根据需要动态地向其中添加尽可能多的承诺。这些添加可能是在一个动态步骤数的循环中,这样我就不能使用chain-like.then().then().then。。。代码贝娄工作不正常,但你会得到的想法。结果应该是控制台在3、4和5秒内记录了3000、4000、5000个数字,但实际上并不是这样。有什么想法吗Javascript 如何向承诺链动态添加新承诺,javascript,promise,Javascript,Promise,我想创建承诺链,然后根据需要动态地向其中添加尽可能多的承诺。这些添加可能是在一个动态步骤数的循环中,这样我就不能使用chain-like.then().then().then。。。代码贝娄工作不正常,但你会得到的想法。结果应该是控制台在3、4和5秒内记录了3000、4000、5000个数字,但实际上并不是这样。有什么想法吗 let launchChain = function(delay) { return new Promise((resolve: Function, reject: Fu
let launchChain = function(delay)
{
return new Promise((resolve: Function, reject: Function) => {
setTimeout(() => {
console.log(delay);
resolve();
}, delay)
})
}
let chain = launchChain(3000);
chain.then(function () {
return launchChain(4000);
})
chain.then(function () {
return launchChain(5000);
})
所以用这个
var延迟=[0,1000,2000,3000,4000];
功能workMyCollection(arr){
返回arr.reduce(功能(承诺、项目){
return promise.then(函数(){
返回启动链(项目);
});
//使用此原始承诺开始链接。
},Promise.resolve());
}
功能启动链(延迟){
返回新承诺(功能(解决、拒绝){
setTimeout(函数(){
控制台日志(延迟);
解决();
},延误);
});
}
workMyCollection(延迟)代码>谢谢sinhavartika!它起作用了!但我实际上从这里举了个例子
并对其进行了一些更改,现在我以以下方式将其用于我的项目中:
/**
* Runs promises from promise array in chained manner
*
* @param {array} arr - promise arr
* @return {Object} promise object
*/
function runPromiseInSequense(arr) {
return arr.reduce((promiseChain, currentPromise) => {
return promiseChain.then((chainedResult) => {
return currentPromise(chainedResult)
.then((res) => res)
})
}, Promise.resolve());
}
var promiseArr = [];
function addToChain(delay)
{
promiseArr.push(function (delay) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(delay);
resolve();
}, delay)
});
}.bind(this, delay))
}
addToChain(1000);
addToChain(2000);
addToChain(3000);
addToChain(4000);
runPromiseInSequense(promiseArr);
chain=chain.then….
?一旦得到解决,您就无法重新打开它。您必须在外部执行轮询Jaromanda X,在代码本身中就是这样做的。但它工作不正常。运行它,您将看到)您能告诉我们,在提供的代码中,哪些地方不能正常工作吗?控制台为我记录“3000、4000、5000个数字在3、4和5秒内完成”。David,5000个数字在4000个数字之后在一秒钟内完成记录,而不是5个。它似乎是chain.then(函数(){return launchChain(4000);})chain.then(函数(){return launchChain(5000);})同时启动的,您想做什么还不清楚。。但是如果它对你有效,那么如果它很棒!
/**
* Runs promises from promise array in chained manner
*
* @param {array} arr - promise arr
* @return {Object} promise object
*/
function runPromiseInSequense(arr) {
return arr.reduce((promiseChain, currentPromise) => {
return promiseChain.then((chainedResult) => {
return currentPromise(chainedResult)
.then((res) => res)
})
}, Promise.resolve());
}
var promiseArr = [];
function addToChain(delay)
{
promiseArr.push(function (delay) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(delay);
resolve();
}, delay)
});
}.bind(this, delay))
}
addToChain(1000);
addToChain(2000);
addToChain(3000);
addToChain(4000);
runPromiseInSequense(promiseArr);