【发布时间】:2019-11-06 08:48:05
【问题描述】:
直到现在,我认为await 使我的程序同步。但是,我看到await 只等待async 函数通过承诺解决,然后整个程序继续运行。那么,等待和收集异步函数响应的正确方法是什么?
原码:
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 返回了承诺,我认为这可能是正确的方法,但then()/catch() 没有执行。
query.getCachedData(did).then((tfnData) => {
result.name = data.name;
result.country = data.country;
console.log(result);
}).catch((dbError) => {
console.log(dbError);
});
谁能纠正我以正确的方式获取result?
【问题讨论】:
-
我将重申罗伯特的评论,因为我认为他没有足够的代表来发表实际评论。请提供
getCachedData的来源或提供足够的信息来重现此问题。您使用的是什么数据库库?我们怎么能导致这种情况发生在我们身上?请阅读minimal reproducible example。 -
query.getCachedData 是异步方法吗?你能告诉我们这个方法是什么样的吗?我怀疑这是一个异步方法或者它返回一个承诺,因为你不能等待它并且你不能执行 then/catch
标签: javascript node.js asynchronous es6-promise