【发布时间】:2017-11-16 06:26:03
【问题描述】:
这个问题有很多答案,但大部分都是同步promise的解析(即执行结束,而不是执行开始)。
This solution 假设我们已经有一个函数数组:
var funcs = [foo, bar, baz, qux];
如何在不执行函数的情况下创建这样的数组?我试过这个:
var promises = [];
for (i = 0 ; i < 3, ++i){
promises.push( someFunction(i) )
}
function someFunction(i) {
return new Promise((resolve, reject) => {
console.log(i);
resolve(i);
});
}
在 for 循环结束时,promises 数组被填充,但 someFunction 已经执行了 4 次。使用Promise.all 或Q 序列只是序列解析。
如何才能真正实现这些功能的开头同步?特别是:
foo().then(bar).then(baz).then(qux);
----------------------------------------------- -----------------
更新(使用异步函数的简单解决方案):
执行此操作的简单方法是使用async 函数和await。请参阅 this answer 以了解在循环中调用 Promise 的示例,其中每个 Promise 将在前一个 Promise 解决时被调用。
【问题讨论】:
-
我不认为内置的 promise API 有这个功能。你可以试试 bluebird 的 Promise.reduce:bluebirdjs.com/docs/api/promise.reduce.html
-
@KarelG:正是我的问题!如何在不调用它的情况下将其推入数组?我想在 for 循环中动态创建这些承诺。
-
for (let i = 0 ; i < 3, ++i){ funcs.push(() => someFunction(i)) }可以。 -
@Bergi:我认为这不会连续运行它们,等待前一个解决。
标签: javascript node.js promise q es6-promise