【发布时间】:2014-01-20 23:12:53
【问题描述】:
Chrome(至少我正在使用的测试版)现在已经在原生 JavaScript 中实现了 Promise,并且基于一些实验,它运行良好。有很多关于“then”和“catch”方法的文档,我可以将 Promise 链接在一起,这样,当一个实现时,下一个就会等待。
但是,我想知道如何并行等待承诺,并在它们全部完成或拒绝时调用回调函数。在这种情况下,所有的结果和原因也必须是可用的,也许在一个数组中。
转储 JavaScript 对象(“Promise”),我看到一个方法“all”,但我找不到它的文档。
谁能提供这方面的信息?
我还实现了自己的实验性并行机制,如下所示:
function async1_promise() {
return new Promise(
function(resolve, reject) {
async_call1(
function () {
resolve("async_call1 worked!");
}
);
}
);
}
function async2_promise() {
return new Promise(
function(resolve, reject) {
async_call2(
function () {
resolve("async_call2 worked!");
}
);
}
);
}
function async3_promise() {
return new Promise(
function(resolve, reject) {
async_call3(
function () {
resolve("async_call3 worked!");
}
);
}
);
}
parallel([async1_promise(), async2_promise(), async3_promise()],
function (promises, results) {
console.log('all done', promises, results);
}
);
function parallel(promises, callback) {
var results = [];
promises.forEach(
function (val, key, array) {
val.then(
function (result) {
results[key] = {
success: true,
result: result
};
if (results.length == promises.length)
callback(promises, results);
},
function (reason) {
results[key] = {
success: false,
result: reason
};
if (results.length == promises.length)
callback(promises, results);
}
);
}
);
}
也欢迎对我处理并行承诺的尝试发表评论。
【问题讨论】:
标签: javascript google-chrome asynchronous