promise async await 明白筆記

在異步編程中,es6供應了promise對象的體式格局。
簡樸的用法

var promise = new Promise((resolve,reject)=>{
    if(){
        resolve(res)
    }else{
        reject(res)
    }
})
promise.the((res)=>{}).catch((res)=>{})

而async 實則是返回了一個promise對象

async function test(){
    console.log("123");
}
var restult = test();
console.log(result);//=>>Promise{"123"};
//假如函數return 一個直接量,那末就即是直接去挪用Promise.resolve()要領
//Promise.resolve要領也就是天生一個Promise實例,而且其直接挪用resolve。
//比方
Promise.resolve('test');
//等同於
new Promise((resolve,reject)=>resolve('test'));
//所以async能夠明白為天生一個promise實例。
//那末天然也能夠去挪用.then()
test.then((res)=>{})

await則是合營async運用的。await即是是守候一個返回值,守候async的實行效果。

async function testAsync() {
    return Promise.resolve("hello async");
}

async function test() {
    const res = await testAsync();
    console.log(res);
}

test();

輸出效果就是’hello async’.
await必需合營async運用,然則await的對象能夠不是Promise對象,一個平常的函數也能夠運用。
假如它比及的不是一個 Promise 對象,那 await 表達式的運算效果就是它比及的東西。
假如它比及的是一個 Promise 對象,await 就忙起來了,它會壅塞背面的代碼,等着 Promise 對象 resolve,然後獲得 resolve 的值,作為 await 表達式的運算效果。然則async函數不會形成壅塞,所以await合營async運用,則沒有影響到外部。

async和await的作用
能夠把promise 的then寫得簡約,便於明白
流程就是天生一個async函數,然後函數內部去await一個promise對象得運轉效果,再用這個效果去挪用別的得Promise對象,云云得話then((res)=>{}).then((ress)=>{})。就能夠寫成

var res = await foo(); 
var ress = await fob(res);
var resss = await foc(ress)

在then鏈龐雜得情況下,promise得參數通報異常龐雜,但運用async+await得體式格局,就犹如同步編程平常,異常清楚和流通。

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