Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺:如何并行执行异步方法,然后执行方法_Javascript_Promise_Q - Fatal编程技术网

Javascript 承诺:如何并行执行异步方法,然后执行方法

Javascript 承诺:如何并行执行异步方法,然后执行方法,javascript,promise,q,Javascript,Promise,Q,我使用Q.js来表示承诺。在下面的代码中,每个方法都进行一个ajax调用,然后返回一个承诺。每种方法在下一个开始之前执行并完成,一切都按预期进行: functionOne().then(junctionTwo) .then(functionThree) .then(doSomethingElse); 然而,我真正想要的是函数一、函数二和函数三同时执行,并且“doSomethingElse”应该只在前3个方法完成时执行 你是如何通过

我使用Q.js来表示承诺。在下面的代码中,每个方法都进行一个ajax调用,然后返回一个承诺。每种方法在下一个开始之前执行并完成,一切都按预期进行:

functionOne().then(junctionTwo)
                .then(functionThree)
                .then(doSomethingElse);
然而,我真正想要的是函数一、函数二和函数三同时执行,并且“doSomethingElse”应该只在前3个方法完成时执行


你是如何通过promises/Q.js实现这一点的?

你正在寻找的
Promise.all


您正在寻找
承诺。所有


您可以使用现在标准化的
Promise.all()
来告诉您一系列承诺何时全部完成:

Promise.all([functionOne(), functionTwo(), functionThree()]).then(function(results) {
    // all are done here
    doSomethingElse();
}).catch(function(err) {
    // error in at least one promise here
});
或者,如果您仍在使用Q库语法,则可以使用
Q.all()
,它也可以执行相同的操作

Q.all([functionOne(), functionTwo(), functionThree()]).then(function(results) {
    // all are done here
    doSomethingElse();
}).catch(function(err) {
    // error in at least one promise here
});

您应该知道,在node.js或浏览器中,没有“同步”,因为js是单线程的(在这里不使用的webWorkers之外)。但是,如果您的操作是异步的(我假设它们返回承诺),那么它们可以同时运行,尽管在任何给定时刻只有一个正在执行。

您可以使用现在标准化的
Promise.all()
来告诉您一系列承诺何时完成:

Promise.all([functionOne(), functionTwo(), functionThree()]).then(function(results) {
    // all are done here
    doSomethingElse();
}).catch(function(err) {
    // error in at least one promise here
});
或者,如果您仍在使用Q库语法,则可以使用
Q.all()
,它也可以执行相同的操作

Q.all([functionOne(), functionTwo(), functionThree()]).then(function(results) {
    // all are done here
    doSomethingElse();
}).catch(function(err) {
    // error in at least one promise here
});

您应该知道,在node.js或浏览器中,没有“同步”,因为js是单线程的(在这里不使用的webWorkers之外)。但是,如果您的操作是异步的(我假设这是因为它们返回了承诺),那么它们可以同时运行,尽管在任何给定的时刻只有一个在执行。

为什么要否决?看起来像是一个连续的落选者,因为问题和所有答案都得到了落选票。奇怪的是没有任何解释。如果没有人提供任何理由来解释为什么他们认为你的答案应该被否决,那么你的答案很难改进。否决票可能只是惩罚性的,也可能通过解释你认为错误的地方来鼓励改进,从而使整个社区受益。也许他确实因为你回答了(而不是投票结束)一个研究不周的问题而惩罚了你?我们不知道,投票是主观的。我只能断言你的答案的内容客观上没有错,你得到了我的+1。这是一个研究得很差的问题吗?任何有已知答案的问题都可能被有答案的人称为“研究糟糕”,不是吗?感谢jfriend00和kouak。我不知道这句话已经被添加到语言中了。为什么要投否决票?看起来像是一个连续的落选者,因为问题和所有答案都得到了落选票。奇怪的是没有任何解释。如果没有人提供任何理由来解释为什么他们认为你的答案应该被否决,那么你的答案很难改进。否决票可能只是惩罚性的,也可能通过解释你认为错误的地方来鼓励改进,从而使整个社区受益。也许他确实因为你回答了(而不是投票结束)一个研究不周的问题而惩罚了你?我们不知道,投票是主观的。我只能断言你的答案的内容客观上没有错,你得到了我的+1。这是一个研究得很差的问题吗?任何有已知答案的问题都可能被有答案的人称为“研究糟糕”,不是吗?感谢jfriend00和kouak。我不知道这已经被添加到语言中。