Async/await
2020-09-21 本文已影响0人
在下高姓
标签: Async/await
正文
Async/await 是以更舒适的方式使用 promise 的一种特殊语法
函数前面的 “async” 这个单词表达了一个简单的事情:即这个函数总是返回一个 promise。
async function f() {
return 1;
}
f().then(alert); // 1
Await:
1.只在 async 函数内工作
2.不能在普通函数中使用 await
3.await 不能在顶层代码运行
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"), 1000)
});
let result = await promise; // 等待,直到 promise resolve (*)
alert(result); // "done!"
}
f();
promise 可能需要一点时间后才 reject。在这种情况下,在 await 抛出(throw)一个 error 之前会有一个延时。
async function f() {
try {
let response = await fetch('http://no-such-url');
} catch(err) {
alert(err); // TypeError: failed to fetch
}
}
f();
如果我们没有 try..catch,那么由异步函数 f() 的调用生成的 promise 将变为 rejected。我们可以在函数调用后面添加 .catch 来处理这个 error:
async function f() {
let response = await fetch('http://no-such-url');
}
// f() 变成了一个 rejected 的 promise
f().catch(alert); // TypeError: failed to fetch // (*)
有一个“普通”函数。如何在这个函数中调用 async
async function wait() {
await new Promise(resolve => setTimeout(resolve, 1000));
return 10;
}
function f() {
// 1 秒后显示 10
wait().then(result => alert(result));
}
f();