简单理解JavaScript 的async/await
2020-12-13 04:22
标签:style fun 变化 代码 作用 error span git rom async函数返回一个 Promise 对象。 async函数内部return语句返回的值,会成为then方法回调函数的参数。 只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数。 正常情况下,await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise 对象。 await命令后面的 Promise 对象如果变为reject状态,则reject的参数会被catch方法的回调函数接收到。 只要一个await语句后面的 Promise 变为reject,那么整个async函数都会中断执行 如果await后面的异步操作出错,那么等同于async函数返回的 Promise 对象被reject。 防止出错的方法,将其放在try...catch代码块之中。 函数前的 在 promise 之前的 await 关键字,使 JavaScript 等待 promise 被处理,然后: 简单理解JavaScript 的async/await 标签:style fun 变化 代码 作用 error span git rom 原文地址:https://www.cnblogs.com/Mr-Tao/p/11108592.html什么是Async/Await?
二、语法
1、返回 Promise 对象
async function f() {
return ‘hello world‘;
}
f().then(v => console.log(v))
// "hello world"
async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到async function f() {
throw new Error(‘出错了‘);
}
f().then(
v => console.log(v),
e => console.log(e)
)
// Error: 出错了
2、Promise对象的状态变化async function getTitle(url) {
let response = await fetch(url);
let html = await response.text();
return html.match(/
3、await命令
async function f() {
await Promise.reject(‘出错了‘);
await Promise.resolve(‘hello world‘); // 不会执行
}
有时,我们希望即使前一个异步操作失败,也不要中断后面的异步操作。这时可以将第一个await放在try...catch结构里面,这样不管这个异步操作是否成功,第二个await都会执行。async function f() {
try {
await Promise.reject(‘出错了‘);
} catch(e) {
}
return await Promise.resolve(‘hello world‘);
}
f()
.then(v => console.log(v))
// hello world
另一种方法是await后面的 Promise 对象再跟一个catch方法,处理前面可能出现的错误。async function f() {
await Promise.reject(‘出错了‘)
.catch(e => console.log(e));
return await Promise.resolve(‘hello world‘);
}
f()
.then(v => console.log(v))
// 出错了
// hello world
4、错误处理async function f() {
try {
await new Promise(function (resolve, reject) {
throw new Error(‘出错了‘);
});
} catch(e) {
}
return await(‘hello world‘);
}
如果有多个await命令,可以统一放在try...catch结构中。
async function main() {
try {
const val1 = await firstStep();
const val2 = await secondStep(val1);
const val3 = await thirdStep(val1, val2);
console.log(‘Final: ‘, val3);
}
catch (err) {
console.error(err);
}
}
总结
async
关键字有两个作用: