async和await
1.async基本用法
async
函数返回一个 Promise
对象,可以使用then
方法添加回调函数。当函数执行的时候,一旦遇到await
就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
例如:①
async function myFunc(){
return "Hello World!";
}
console.log(myFunc());
控制台打印结果:
②返回错误信息
async function myFunc(){
const promise = new Promise((resolve,reject) => {
setTimeout(() => resolve('Hello World!'),2000)
})
//错误信息
const error = true;
如果是true则会返回错误信息,
如果是false,两秒之后会返回正确信息 Hello World!
if(!error){
//等待resolve执行完毕之后,才会执行
const res = await promise;
return res;
}else{
await Promise.reject(new Error("error:报错了!"));
}
}
myFunc()
.then(data => console.log(data))
.catch(err => console.log(err));
2.await基本用法
①await
命令后面是一个 Promise
对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。
async function f() {
// 等同于
// return 123;
return await 123;
}
f().then(v => console.log(v))
// 123
上面代码中,await命令的参数是数值123
,等同于return 123
②await命令后面的 Promise 对象如果变为reject
状态,则reject
的参数会被catch
方法的回调函数接收到
async function f() {
await Promise.reject('出错了');
}
f()
.then(v => console.log(v))
.catch(e => console.log(e))
// 出错了
这里在await前面加上return
,效果是一样的。
③任何一个await
语句后面的 Promise
对象变为reject
状态,那么整个async
函数都会中断执行
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