【发布时间】:2017-05-24 16:42:29
【问题描述】:
var promiseReturningFuncs = [];
for(var i = 0; i < 5; i++){
promiseReturningFuncs.push(askQuestion);
}
var programmers = [];
Promise.reduce(promiseReturningFuncs, function(resp, x) {
console.log(typeof resp);
if(typeof resp != "function") {
programmers.push(resp);
}
return x();
})
.then(function(resp) {
programmers.push(resp);
console.log(programmers);
});
我的目标:依次执行 askQuestion 函数并解析由该函数创建的对象数组。 (此函数必须串行执行,以便响应用户输入)
想象一下,askQuestion 函数返回一个 promise,它解析了我想添加到数组中的对象。
这是我乱七八糟的做法。 我正在寻找一种更清洁的方法,理想情况下,我什至不需要推送到数组,我只需要一个最终的 .then,其中响应是一个数组。
【问题讨论】:
-
您可能会将其视为throttling problem,其中在给定时间打开的 Promise 数量被限制为 1。
-
Promise.all(promiseReturningFuncs.map(func=>func())).then(console.log);
-
你尝试过使用 promise.all() 吗?
-
如果这是您想要改进的工作代码,那么这个问题可能属于codereview.stackexchange.com。如果这不是工作代码,请准确描述它产生的输出以及您希望它产生的输出。
-
您可以在此处查看一些用于排序异步操作的设计模式:How to synchronize a sequence of promises。此外,如果您使用的是 Bluebird Promise 库(看起来可能是这样),那么
Promise.mapSeries()可能就是您想要的。
标签: javascript asynchronous promise