如何同步一系列承诺?我有一个承诺对象数组,这些对象必须按照数组中列出的相同顺序进行解析,也就是说,在解析完前一个元素(作为方法)之前,我们不能尝试解析一个元素。Promise.all([...]))。如果一个元素被拒绝,我需要链立即拒绝,而不试图解析以下元素。我如何实现这一点,或者是否存在这样的现有实现?sequence模式?function sequence(arr) {
return new Promise(function (resolve, reject) {
// try resolving all elements in 'arr',
// but strictly one after another;
});}编辑最初的答案表明我们只能sequence这种数组元素的结果,而不是它们的执行,因为它是在这样的示例中预先定义的。但是,如何产生一系列的承诺,以避免早期执行呢?下面是一个修改过的示例:function sequence(nextPromise) {
// while nextPromise() creates and returns another promise,
// continue resolving it;}我不想把它变成一个单独的问题,因为我认为这是同一个问题的一部分。解下面的一些答案和随后的讨论有点误入歧途,但最终的解决方案,正是我所寻求的,是在内部实现的。斯皮克斯图书馆,作为方法序列..该方法可以遍历动态长度序列,并根据应用程序的业务逻辑创建承诺。后来,我把它变成了一个共享库,供大家使用。
3 回答
波斯汪
TA贡献1811条经验 获得超4个赞
.each
Smart猫小萌
TA贡献1911条经验 获得超7个赞
doSomethingAsync().then(function(){ doSomethingAsync2().then(function(){ doSomethingAsync3(); ....... });});
编辑
var callbackArr = [];var promiseArr = [];promiseArr.push(doSomethingAsync()); callbackArr.push(doSomethingAsyncCallback);promiseArr.push(doSomethingAsync1()); callbackArr.push(doSomethingAsync1Callback);.........promiseArr.push(doSomethingAsyncN()); callbackArr.push(doSomethingAsyncNCallback);
$.when(promiseArr).done(function(promise){ while(callbackArr.length > 0) { callbackArr.pop()(promise); }});
添加回答
举报
0/150
提交
取消