我有一个简单的函数,目的是登录用户,其中有一些保护子句来排除错误
async signIn(email: string, passwort: string): Promise<void> {
const user: IPerson = await this.fetchUser(email);
if (user === undefined) {
return Promise.reject('Wrong email');
}
if (user.passwort !== passwort) {
return Promise.reject('Wrong password');
}
if (!this.logInUser(user)) {
return Promise.reject('Login Failed');
}
return Promise.resolve();
}
我使用async await等待fetchUser给我的用户的承诺解决,但这让我思考,等待在这里有什么好处?
正如一些博客所总结的那样,async是如何工作的:
"让我们强调一下:await实际上是挂起函数执行,直到promise结束,然后使用promise结果恢复它。这不会消耗任何CPU资源,因为JavaScript引擎可以在此期间做其他工作:执行其他脚本,处理事件等。
但是在我的情况下,同时没有其他其他作业,该函数只能在fetchUser提供一些东西时解决。这是否意味着JS引擎自动等待和行为就像使用异步一样?那就多余了。
等待在这里有什么好处?
它让你编写比使用then
和回调更容易遵循的语法。
。
但是在我的情况下,同时没有其他其他作业,该函数只能在fetchUser提供一些东西时才能解决。
fetchUser
是异步的。使用await
不使其异步化。它提供了一个承诺。
如果你不await
这个承诺,那么你只是改变了代码执行暂停的位置。
不是挂起signIn
,而是挂起fetchUser
,而signIn
将继续处理fetchUser
返回的承诺,而不是承诺最终解析的User对象。
这是否意味着JS引擎自动等待和行为就像使用异步一样?那就多余了。
不,JS引擎不会自动"等待"。如果没有await
,它将立即继续执行if
语句,这显然是不希望的,因为这样您就没有实际的user
对象可以使用,而只是"一个promise对象。
fetch
,然后它对await
来说是多余的,但是由于您需要来自该请求的响应,因此您需要在响应可用时得到通知,这就是await
为您提供的。您也可以链接then
调用,当响应可用时将调用其回调。