(function() {
function main() {
call1();
call2();
}
function call1() {
return new Promise(() => {
for (let i=0; i<100; i++) {
console.log('This is call-1:', i);
}
});
}
function call2() {
return new Promise(() => {
for (let i=0; i<100; i++) {
console.log('This is call-2:', i);
}
});
}
main();
})();
http://plnkr.co/edit/NtioG92Tiba1KuKTx24I
输出包含所有call-1
语句,后跟所有call-2
语句。我想并行运行这两个调用。这只是一个模仿我的真实代码的示例,其中我有两个函数,每个函数中都有ajax调用。这些呼叫成功或失败都会触发另一系列呼叫。所以,我想让这两个主要函数并行。这是正确的方法吗?
发布于 2018-09-14 05:46:07
我相信你想像这样运行你的main函数:
function main() {
Promise.all([call1(), call2()])
.then( (data) => {
// this block will run, if and when BOTH calls/promises resolve
// process the data from calls
})
.catch( (err) => { // process the err });
}
Promise.all
是如何运行2个或更多异步调用并等待所有调用完成的方法。正如评论中提到的,它们并不像你想象的那样并行运行。
还要确保call1()
和call2()
函数将在某个时刻调用resolve
或reject
函数。通过调用这些函数,您可以让程序知道它是完成还是“出错”。关于它的更多信息here
https://stackoverflow.com/questions/52322068
复制相似问题