Javascript 在Chrome中使用本机实现处理并行承诺
Chrome(至少是我正在使用的beta版)现在已经在本地JavaScript中实现了承诺,并且,基于一些实验,它工作正常。有很多关于“then”和“catch”方法的文档,我能够将承诺链接在一起,这样,当一个承诺实现时,下一个承诺就会等待 然而,我想知道如何并行地等待承诺,在承诺全部实现或拒绝时调用回调函数。在这种情况下,所有结果和原因也必须可用,可能是在一个数组中 在转储JavaScript对象(“Promise”)时,我看到一个方法“all”,但我找不到它的文档 有人能提供这方面的信息吗 我还实现了自己的实验并行机制,如下所示:Javascript 在Chrome中使用本机实现处理并行承诺,javascript,google-chrome,asynchronous,Javascript,Google Chrome,Asynchronous,Chrome(至少是我正在使用的beta版)现在已经在本地JavaScript中实现了承诺,并且,基于一些实验,它工作正常。有很多关于“then”和“catch”方法的文档,我能够将承诺链接在一起,这样,当一个承诺实现时,下一个承诺就会等待 然而,我想知道如何并行地等待承诺,在承诺全部实现或拒绝时调用回调函数。在这种情况下,所有结果和原因也必须可用,可能是在一个数组中 在转储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);
}
);
}
);
}
欢迎对我处理并行承诺的尝试发表评论。
Promise.all
接受一系列承诺实例,只有在它们全部解决或一个被拒绝后才会继续
一旦所有承诺得到解决,它将按照传递给Promise.all
的相同顺序为您提供一个结果数组,以便您可以访问所有响应,
或者遇到的第一个拒绝将触发捕获
使用您的示例,以下内容可以替代您的并行
功能:
Promise.all([async1_promise(), async2_promise(), async3_promise()])
.then(function(results) {
// results = ["async_call1 worked!", "async_call2 worked!", "async_call3 worked!"]
})
.catch(err) {
// error handling
// only called once for the first reject encountered
});
有用的链接
- -ES6承诺规范
- -请参见
,了解实施情况PromiseAll
- -非Chrome,但使用相同规格,并有使用示例
- -包含有关使用
的部分。所有
。all
并行处理?all接受iterable作为参数,因此它将迭代内容,而不是神奇地并行处理:-)