为什么要使用 async & await 而不是 Promise 类?
为了回答这个问题,我们首先应该说说什么是承诺以及承诺的作用是什么。
什么是承诺
Promise 是一种编写异步代码的方式,这意味着一个函数将在未来的某个时间返回一些数据,并且代码将继续执行。例如,假设我们饿了,想做一个汉堡。那么我们会先把肉放到炉子上烤,同时切蔬菜。肉烤好后,我们把它从热盘上取下来,放入汉堡中,然后放入蔬菜,一切就绪了。烤肉就是 Promise,烤好后我们会用它做一些事情,这就是我们所说的异步编程。
用法
这是一个简单的函数,用于获取和加载数据。Promise 类提供了两种实现方式,其中 .then 表示 Promise 已结束,.catch 表示发生错误。
const makeRequest = () => {
getUserData
.then(user => {
console.log(user);
});
}
const makeRequest = async () => {
console.log(await getUserData());
}
我们看到,使用async 和 await可以减少代码量,但这样,当只有一个函数时,使用 await 还是 promise 类都无所谓。但如果有两个或多个相互依赖的函数,会发生什么情况呢?例如,我们首先想获取一个用户,然后想获取该用户加入的所有俱乐部。以下是两种实现方式。
const makeRequest = () => {
getUserData
.then(user => {
getClubsForUser(user.id)
.then(clubs => {
console.log(clubs);
}).catch(err => {
console.log(err.message);
})
}).catch(err => {
console.log(err.message);
})
};
const makeRequest = async () => {
try {
let user = await getUserData();
let clubs = await getClubsForUser(user.id);
console.log(clubs);
}
catch(err) {
console.log(err.message);
}
};
第一个例子会让你头疼。很容易迷失在嵌套的括号中。你可以在第二个例子中看到,使用async & await的代码更清晰易读。而且,我们还要处理回调地狱。async & await是编写异步代码的语法糖。它使代码看起来和行为更像同步代码,但仍然是异步的。
结论
有些人可能会说,使用async & await可以让异步代码不那么明显。但 C# 早就有这个功能了,熟悉它的人都知道,这点暂时的不便还是值得的。
文章来源:https://dev.to/svetloslav15/why-to-use-async-await-instead-of-the-promise-class-4can