js异步编程-async,await以及不可以庖代的Promise

ES7带来了async和await,让js的异步编程越发轻易。

async和await的简朴语法实验

async和await是Promise的语法糖,让誊写越发轻易。然则他们是庖代不了Promise的。他们是建立在promise机制上的。
简朴语法实验:
(1)
一般情况下,能够看出也打印出来一个Promise。个中Promise状况是‘resolved’;
《js异步编程-async,await以及不可以庖代的Promise》

(2)
这类情况下,看出Promise状况是’rejected’。并报错,不想报错“红错”,能够运用try…catch
《js异步编程-async,await以及不可以庖代的Promise》
(3)
将报错信息catch到。
《js异步编程-async,await以及不可以庖代的Promise》

async,await简介

async
async是用来示意函数是异步的,涌现async,会返回一个Promise对象,就能够运用then要领,轻易的添加回调函数了。是语法越发简约。

await
必需涌现在async中,不可零丁运用;
await背面能够跟任何js表达式,也就是awati能够等许多范例的东西,但主如果等Promise对象被状况被resolved。

小示例

注重:reject(‘123’),须要try,catch才能将信息拿出来。
例子:
(1)resolve一般情况下能够拿出。
《js异步编程-async,await以及不可以庖代的Promise》

(2)reject拿不出
《js异步编程-async,await以及不可以庖代的Promise》
(3)reject须要用try,catch猎取信息
《js异步编程-async,await以及不可以庖代的Promise》

不要将并发要求发成了壅塞式同步

如:

function aa(second){

return new Promise((resolve,reject) => {
    setTimeout(() => {
        resolve('request done'+Math.random());
    },second);
})

}

async function bugDemo(){

await aa(1000);
await aa(1000);
await aa(1000);
console.log('clear the loading~');

}

bugDemo();

不壅塞的写法
function aa(second){

return new Promise((resolve,reject) => {
    setTimeout(() => {
       console.log('request done'+Math.random());
    },second);
})

}
async function bugDemo(){

let a =aa(1000);
let b =aa(1000);
let c =aa(1000);
await Promise.all([a,b,c])
console.log('clear the loading~');

}
bugDemo();

注重:await只能在async函数的高低文中。
async function forDemo(){

   let arr = [1,2,3,4,5];
   for(let i=0;i<arr.length;i++){

await arr[i];
}
}
这个是一般的,不会报错。

async function forBugDemo(){
let arr = [1,2,3,4,5];
arr.forEach(item => {
await item;
});
}
这个会报错

    原文作者:幸福璐
    原文地址: https://segmentfault.com/a/1190000016049161
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞