首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与promises并行运行两个javascript函数

与promises并行运行两个javascript函数
EN

Stack Overflow用户
提问于 2018-09-14 05:30:13
回答 2查看 1.3K关注 0票数 0
代码语言:javascript
复制
(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调用。这些呼叫成功或失败都会触发另一系列呼叫。所以,我想让这两个主要函数并行。这是正确的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-09-14 05:45:00

调查一下Promise.all https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

这将调用您的所有承诺,并在它们完成时解析(解析或拒绝)。

另一种选择是Promise.race,这取决于您的用例。

这将返回完成(解决或拒绝) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race的第一个Promise

票数 -1
EN

Stack Overflow用户

发布于 2018-09-14 05:46:07

我相信你想像这样运行你的main函数:

代码语言:javascript
复制
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()函数将在某个时刻调用resolvereject函数。通过调用这些函数,您可以让程序知道它是完成还是“出错”。关于它的更多信息here

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52322068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档