强制一个函数等待,直到另一个函数完成

问题描述 投票:0回答:2

我不熟悉JavaScript,并且已经尝试使它工作一段时间了,但没有成功。

我有一个功能(任务3),只能在功能完成之前执行。在它之前的功能(任务1和2)中有更多功能可以从其他来源获取数据,而这些功能花费的时间未知。等待功能不会真正起作用,因为任务1和2的时间可能非常快或非常慢。我尝试执行异步/等待设置,但是我一定做错了,因为它总是在任务1或2之前完成任务3。与回调函数相同,实际上并没有回调它只是执行了任务1和2,所以从未执行过任务3。

function task1(input){
   // has more functions that do other stuff

}
function task2(input){
   // has more functions that do other stuff
}
function task3(input){
   // this code should only be executed after both task 1 and 2 finish
}

function main(input1, input2, input3){
    task1(input1); // doesn't matter which task finishes first between 1 and 2
    task2(input2);
    task3(input3); // task 3 should not be executed until task 1 and 2 have completed.
}

main(input1, input2, input3);

如果有人可以帮助,将不胜感激。

javascript asynchronous callback
2个回答
0
投票

使用await Promise.all等待两个任务完成。这不会强制执行任何命令,但会确保两者都已完成,然后再继续。

    呼叫task3
  • async function task1(input){ // has more functions that do other stuff } async function task2(input){ // has more functions that do other stuff } function task3(input){ // this code should only be executed after both task 1 and 2 finish } async function main(input1, input2, input3){ await Promise.all( task1(input1), task2(input2) ) task3(input3); } main(input1, input2, input3);

  • 0
    投票

    function task1() { return new Promise(function(resolve, reject) { console.log("task 1") setTimeout(function() { resolve('foo'); }, Math.random() * 2000); }) } function task2() { return new Promise(function(resolve, reject) { console.log("task 2") setTimeout(function() { resolve('bar'); }, Math.random() * 2000); }) } function task3() { console.log("task 3") } Promise.all([task1(), task2()]).then(function(values) { console.log(values); task3() });
    © www.soinside.com 2019 - 2024. All rights reserved.