簡體   English   中英

等待兩個異步功能完成,然后在Node.js中繼續

[英]Wait for two async functions to finish then continue in Node.js

我正在使用Node.js中的應用程序,在該應用程序中我兩次調用了異步函數,並將該值分配給全局變量。

問題是我想使用這兩次調用的結果來做其他事情,但是其他事情並沒有等待分配結果。

這是我的代碼:

var a;
var b;

let x = 'abcd';
foo(x).then(data=>{
    a = data;
});

x = 'efgh';
foo(x).then(data=>{
    b = data;
});

console.log(a + b); // for example

我如何在執行a + b之前等待兩個函數完成?

foo返回Promise時,您應該使用async關鍵字將函數標記為asyncronus,並等待foo函數以await關鍵字響應。

 async function someFunction(){   
  let x = 'abcd';
  let a = await  foo(x);

  x = 'efgh';
  let b = await foo(x);
  console.log(a + b)
}

您可以在此處使用Promise.all ,等待兩個promise,然后使用它們的數據:

 let promises = []; let x = 'abcd'; promises.push(foo(x)) x = 'efgh'; promises.push(foo(x)) Promise.all(promises).then(([a, b]) => { console.log(a, b); // for example }); function foo(d) { return Promise.resolve({somePaddingData:"", d}); } 

除了使用.then()還可以使用await 所以這:

foo(x).then(data=>{
    a = data;
});

會是這樣的:

a = await foo(x);

其他功能也一樣。 這將導致您的執行要等到函數返回。 但是請注意,要使用await必須將使用它的語句甚至更好的是將整個塊包裝在一個聲明為aync的函數中。您可以在此處找到有關如何使用async 信息

嘗試這個:

 //using setInterval to wait for completion //a function which returns a callback function foo(x,callback){ //do some computaion on x callback(x); }; //to store the response let result = []; //calling foo method twice parallely foo("123",(data)=>{ result.push(data); }); foo("456",(data)=>{ result.push(data); }); //waiting till the above functions are done with the execution //setInterval function will check every 100 ms(can be any value) if the length of the result array is 2 let timer = setInterval(() => { if (result.length == 2) { clearInterval(timer); //prints the two value console.log(result.join("")) } }, 100); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM