Eloquent Javascript一书的第17章中的一个练习是实现Promise.all()方法,我想出了这个实现(它不起作用):
function all(promises) {
return new Promise(function(success, fail) {
var successArr = new Array(promises.length);
if (promises.length == 0)
success(successArr);
var pending = promises.length;
for (var i = 0; i < promises.length; i++) {
promises[i].then(function(result) {
successArr[i] = result;
pending -= 1;
if (pending == 0)
success(successArr);
}, function(error) {
fail(error);
});
}
});
}
// Testing
function soon(val) {
return new Promise(function(success) {
setTimeout(function() { success(val); },
Math.random() * 500);
});
}
all([soon(1), soon(2), soon(3)]).then(function(array) {
console.log("This …Run Code Online (Sandbox Code Playgroud) 这是我对嵌套诺言的第一枪。我使用的是bluebird库,但我认为对于所有的Promise库都是相同的。
从高层次上讲,这就是我想要做的:
myService.getSomeData(url)
.then((data) => {
myOtherService.getMoreData(data.uniqueId)
.then((thisDataIsAnArray) => {
//loop over the data above and do something
});
});
Run Code Online (Sandbox Code Playgroud)
getMoreData()应该进行X次服务调用并将结果存储在X个元素数组中。这是我开始迷路的地方,因为我不确定如何制作此方法以及应该从中得到什么。我已经在蓝鸟那里taken了几口Promise.all,Promise.map但是却挣扎了,以为我会征求建议。