我正在开发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
之前如何等待两个函数完成?
答案 0 :(得分:4)
当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)
}
答案 1 :(得分:2)
您可以在此处使用Promise.all
,等待两个诺言,然后使用它们的数据:
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});
}
答案 2 :(得分:0)
可以使用.then()
来代替await
。
所以这个:
foo(x).then(data=>{
a = data;
});
会是这样的:
a = await foo(x);
其他功能相同。这将导致您的执行要等到函数返回。
但是请注意,要使用await
,您必须将使用它的语句,甚至更好的是将整个块包装在声明为aync
的函数中。使用async
here。
答案 3 :(得分:0)
尝试一下:
//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);