async/await是JS中编写异步或非阻塞代码的新方法。它建立在Promises之上,让异步代 码的可读性和简洁度都更髙。
async/await是JS中编写异步或非阻塞代码的新方法。它建立在Promises之上,相对于 Promise和回调,它的可读性和简洁度都更高。但是,在使用此功能之前,我们必须先学习 Promises的基础知识,因为正如我之前所说,它是基于Promise构建的,这意味着幕后使用 仍然是Promise。
使用 Promise
function callApi() {
return fetch("url/to/api/endpoint")
.then(resp => resp. json())
.then(data => {
//do something with "data"
}). catch(err => {
//do something with "err"
});
}
使用 async/await
在async/await,我们使用tru/catch语法来捕获异常。
async function callApi() {
try {
const resp = await fetch("url/to/api/endpoint");
const data = await resp.json();
//do something with "data"
} catch (e) {
//do something with "err"
}
}
注意:使用async关键声明函数会隐式返回一个Promiseo
const giveMeOne = async () => 1; giveMeOne()
.then((num) => {
console. log(num); // logs 1
});
注意:await关键字只能在async function中使用。在任何非async function的函数中使用 await关键字都会抛出错误。await关键字在执行下一行代码之前等待右侧表达式(可能是一个 Promise)返回。
const giveMeOne = async () => 1;
function getOne() {
try {
const num = await giveMeOne();
console. log(num);
} catch (e) {
console. log(e);
}
// Uncaught SyntaxError: await is only valid in async function
async function getTwo() {
try {
const numl = await giveMeOne() ; //这行会等待右侧表达式执行完成
const num2 = await giveMeOne() ;
return numl + num2;
} catch (e) {
console. log(e);
}
)
awai.t getTwo(); // 2
Was this helpful?
0 / 0