在简单函数中使用async await的好处



我有一个简单的函数,目的是登录用户,其中有一些保护子句来排除错误

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调用,当响应可用时将调用其回调。

相关内容

  • 没有找到相关文章

最新更新