模块 7 · 第 2 课(共 4)课程中的26/32~12 min
模块课程(2/4)
异步/等待
async/await 是使用 Promises 的更清晰的语法:代码 ** 读起来像
同步代码**,但在幕后它使用与上一课完全相同的 Promises。
async function
使用 async 声明的函数始终返回 Promise。
JS
async function forty() {
return 40;
}
forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40即使您返回一个“正常”值,该函数也会将其包装在已解析的 Promise 中。
await
在 async function 中,您可以将 await 放在 Promise 之前:执行被 暂停
直到 Promise 解决,然后继续处理已解决的值。
JS
async function sum() {
const a = await Promise.resolve(10);
const b = await Promise.resolve(20);
return a + b; // 30
}相当于 .then 风格(更详细):
JS
function sum() {
return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}await 传播错误
如果 Promise 被 rejected, await 会重新抛出错误。你可以用普通的方法来捕获它
try/catch:
JS
async function read() {
try {
const x = await Promise.reject(new Error('no'));
return x;
} catch (err) {
return 'error: ' + err.message;
}
}
read(); // Promise { 'error: no' }箭头异步
JS
const double = async (n) => n * 2;
double(5); // Promise { 10 }尝试一下
锻炼#js.m7.l2.e1
尝试:0加载中...
定义一个“异步函数 addOne(p)”,它接收数字的 Promise 并返回(作为 Promise)数字 + 1。使用 wait。
正在加载编辑器...
显示提示
const n = 等待 p;返回n+1;
3 次尝试后可用的解决方案
复习练习
锻炼#js.m7.l2.e2
尝试:0加载中...
定义异步 `sumTwo(pa, pb)`:接收两个数字 Promise,返回它们的和。使用两个连续的等待。
正在加载编辑器...
显示提示
等待每一个,然后返回 a + b。
3 次尝试后可用的解决方案