为什么 async/await 会产生不同的结果
2021-12-28
792
我只是在问这个问题,以澄清并对JavaScript承诺有更好的了解。以下两个代码看起来与我非常相似,但是为什么两者都给出不同的结果。还如何在 中获得 async/等待 功能的结果。然后 。谢谢。
异步/等待
907448101
075839675
358799517
714673325
async/等待 返回正确的名称和 。 /p>
2个回答
是的,这正是我们所期望的。
请记住,
await
会有效地暂停执行,直到等待的操作完成。
在您使用
.then
的示例中,您会立即返回,因为您没有编写承诺链,以便仅在等待的操作序列完成时返回
response
。相反,您会立即返回
undefined
值,该值是初始化
response
时使用的
因此,通过
.then
表达您的逻辑(否则不变)的正确方法将是
const getFieldValue = (collection, userid) => {
let response;
return firestore() // notice the return here! This is vital
.collection(collection)
.where("userid", "==", userid)
.get()
.then((querySnapshot) => {
querySnapshot.docs.find((doc) => {
const { name } = doc.data();
response = name;
});
})
.then(() => response) // notice how we resolve our promise chain with the value ultimately assigned
.catch((e) => console.log(e));
};
Aluan Haddad
2021-12-28
因为使用 async/await 时, 函数的执行被暂停(“暂停”),直到承诺得到解决 。因此,您的函数会等待结果。
但是,使用 .then 时,您的 函数将立即继续 执行 .then “块”下方的代码, 不会等待承诺得到解决 。因为响应在 .then 部分中设置之前就已返回,因此仍未定义。
使用 async/await 时,您必须想象 return 语句也在 .then 块中。
Georg Edlbauer
2021-12-28