gpt4 book ai didi

javascript - 如何等待异步函数并收集响应

转载 作者:行者123 更新时间:2023-11-29 22:55:13 26 4
gpt4 key购买 nike

直到现在,我认为 await 使我的程序同步。但是,我看到 await 只等待 async 函数被 promise 解决,然后整个程序继续运行。那么,等待和收集异步函数响应的正确方法是什么?

原代码:

let result={
name:'',
country:''
};
const data = await query.getCachedData(did);
result.name = data.name; // undefined
result.country = data.country;//undefined
console.log(result);

我不知道为什么但等待异步函数结果有效:

let result={
name:'',
country:''
};
const data = await query.getCachedData(did);
result.name = await data.name; //'Jon'
result.country = await data.country;// 'US'
console.log(result);

但我不确定这是否是解决方案。

由于 getCachedData 返回了 promise ,我认为这可能是正确的方法,但 then()/catch() 没有执行。

query.getCachedData(did).then((tfnData) => {
result.name = data.name;
result.country = data.country;
console.log(result);
}).catch((dbError) => {
console.log(dbError);
});

任何人都可以纠正我以正确的方式获得结果吗?

最佳答案

Promise 是异步函数的返回值。结果可能还没有完成。这就是为什么你可以 await 一个方法(就像你做的那样)。这将在计算完成时设置函数的返回值。

或者你可以使用'then':

const data1 = await query.getCachedData(did);
//data1 has a value at this point of code

const data2;
query.getChachedData(did).then((result)=>{data2 = result});
//data2 can have a value or will get one later (this is async) at this point of code

使用 Promise all,您可以让多个方法异步运行并同时等待所有方法。 https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

const callStack = [];

const data1;
const data2;
callStack.push(query.getChachedData(did).then((result)=>{data1 = result}));
callStack.push(query.getChachedData(did).then((result)=>{data2 = result}));
//run both query Methods at asynchronous
await Promise.all(callStack);
//data1 and data2 hava a value at this point of code

关于javascript - 如何等待异步函数并收集响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56738368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com