我有一段使用Q promise库的代码,如下所示:
var q = require('q')
var promises = [ promise1, promise2, promise3]
q.allSettled(promises)
.then( function(results) {
for( var i=0; i发布于 2016-06-21 18:36:01
没有“履行诺言”这回事。Promise是
结果
异步操作。执行promise类似于执行数字5。
你做了什么
可以
同步执行返回承诺的函数。这就是
可以做到。
您可以使用
原语,而不是
:
var functions = [promiseReturningFn1, promiseReturningFn2, promiseReturningFn3];
functions.reduce((soFar, current) => {
return soFar.then(() => // wait for previous actions
return current().reflect();
});
}, Q());和建筑
因为Q没有:
Q.prototype.reflect = function() {
var p = this;
return p.then(v => ({ state: "fulfilled", value: v }),
.catch(r => ({ state: "rejected", reason: r }));
}这将按顺序运行所有操作,但会在出现错误时继续运行它们。
发布于 2021-03-02 07:30:28
让我把我的例子放在这里。这可能会有帮助。
我们有一个数字10,我们想要一致地减去数字2,1,3。
所以结果应该是8,7,4。
import Q from 'q';
let sum = 10;
const nums = [2, 1, 3];
const generatePromise = (num) => {
return new Promise((resolve) => {
setTimeout(() => {
sum -= num
console.log('sum', sum);
resolve(sum);
});
})
}
// let's create an array of our promises
const promises = [];
nums.forEach(num => promises.push(generatePromise(num)));
// let's use Q.all to get the result
await Q.all(promises).then(data => console.log(data)); // [ 8, 7, 4 ]它像预期的那样工作!
但是如果执行时间不同呢?
const generatePromise = (num) => {
return new Promise((resolve) => {
setTimeout(() => {
sum -= num
resolve(sum);
}, 1000 * num); // <----- let's wait 2 sec for the first promise, 1 sec for the second one, and 3 sec for the last one
})
}现在我们得到了一个错误的结果-
7、9、4
如何解决?这是一个解决方案:
let sum = 10;
const nums = [2, 1, 3];
const generatePromise = (num) => {
return new Promise((resolve) => {
setTimeout(() => {
sum -= num
console.log('sum', sum);
resolve(sum);
}, 1000 * num);
})
}
nums.reduce(async (previousPromise, num) => {
await previousPromise;
return generatePromise(num);
}, Promise.resolve());https://stackoverflow.com/questions/37931108
复制相似问题