读取代码库并看到异步/等待功能的异步可能看起来有些棘手。在本文中,您将看到它们如何工作,并注意到这是一种聪明,更轻松的方法,可以使用异步功能。
先决条件ð
- 对承诺的工作知识(如果您不记得,我会快速复习!)
- 尝试/捕获的工作知识
- 代码编辑器(我推荐Visual Studio Code)
让我们开始吧
首先,让我们分解 async 关键字
当您在函数之前看到异步关键字时,这意味着该功能将返回承诺。 (这是复习!!)简单地说明了一个对象,它包含最终完成或同步操作失败的结果。让我们看一下它,
async function brewCoffee() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("coffee is done! enjoy :)"), 2000)
});
try {
let coffee = await promise;
console.log(coffee);
} catch(error) {
console.log('error', error);
}
}
brewCoffee();
//output: coffee is done! enjoy :)
函数brewCoffee
从承诺开始,该承诺将在2秒后解决。该承诺将被分配给将打印出来的变量coffee
。如果承诺被拒绝,则错误将在捕获量中打印出来。
如何扮演角色?
await
关键字将暂停该函数的执行,以便承诺可以解决。
他们俩如何一起工作
await
关键字在async
函数中声明。通常,您会在API呼叫中看到async/await
。这将确保在调用其他代码行之前正确获取数据。例如,
async function fetchCappiccunoRecipe() {
const response = await fetch('https://api.sampleapis.com/coffee/hot');
const recipe = await response.json();
return recipe;
}
function makeCoffee(recipe) {
console.log('The coffee was made with this ', recipe);
}
async function barista() {
const recipe = await fetchCappiccunoRecipe();
makeCoffee(recipe);
}
barista();
当调用barista
函数时,将获取配方,该配方将作为makeCoffee
函数中的参数传递。
关键要点
async/await
将使您的代码更易于使用,尤其是因为它使其更可读。这也是编写异步功能的一种更简洁的方式。或者,它可以像这样写
function fetchCappiccunoRecipe() {
return fetch('https://api.sampleapis.com/coffee/hot');
}
function makeCoffee(recipe) {
console.log('The coffee was made with this ', recipe);
}
function barista() {
fetchCappiccunoRecipe().then((response) => {
response.json().then((recipe) => {
makeCoffee(recipe);
});
});
}
barista();
您可以看到还有更多嵌套和回调功能。总体而言,这是一种更令人困惑的经历。
下一步
您的代码库中可能有机会使用async/await
进行重构功能。我推荐有关将承诺迁移到async/await
函数的文章:如果您需要其他指导,https://afteracademy.com/blog/migrating-from-promise-chains-to-async-await/!感谢您的阅读和愉快的编码:)