async和await的講解

2021-10-05 16:50:46 字數 1735 閱讀 1924

async和await的講解

宣告async函式的幾個方法

普通的函式宣告

async function a(

)

宣告乙個函式表示式

let a=async function(

)

async形式的箭頭函式

let a=async ()=

>

初識async和await

async與await例項應用,基礎**

控制器呼叫與server中查詢資料

exports.getbloglist =async (ctx,next)

=>

exports.getbloglistserver= async ()=

>

let bloglist= await articleblogda.findall();

console.log(

"哈哈哈"+bloglist)

;return bloglist;

}

1.方法執行後的返回值:await命令後面對應的是promise物件或值,如果是值,就會轉到乙個立即resolve的promise物件。async函式返回的是乙個promise物件,如果結果是值,會經過promise包裝返回。

2.await與並行:如果在乙個async的方法中,有多個await操作的時候,程式會變成完全的序列操作,乙個完事等另乙個但是為了發揮node的非同步優勢,當非同步操作之間不存在結果的依賴關係時,可以使用promise.all來實現並行,all中的所有方法是一同執行的。

.3執行後的結果:async函式中,如果有多個await關鍵字時,如果有乙個await的狀態變成了rejected,那麼後面的操作都不會繼續執行,promise也是同理await的返回結果就是後面promise執行的結果,可能是resolves或者rejected的值使用場景迴圈遍歷方便了**需要同步的操作(檔案讀取,資料庫操作等)

async函式中,如果有多個await關鍵字時,如果有乙個await的狀態變成了rejected,那麼後面的操作都不會繼續執行,promise也是同理有這樣乙個函式async

function getdata(

)

直接呼叫

var value=getdata(

);

是對於這個函式直接呼叫的時候並不是你想要的返回值,因為async方法返回的永遠是乙個promise,即使開發者返回的是乙個常量,也會被自動呼叫的promise.resolve方法轉換為乙個promise。因此對於這種情況,上層呼叫方法也需要是async函式,採用如下方法

async function ***x(

)

對於這種呼叫,如果還存在更高層次的方法呼叫,那麼從底層的非同步操作開始,一直到最頂層乙個不需要返回值的函式為止,全部的方法都要變成async

async和await的講解

普通的函式宣告 async function a 複製 宣告乙個函式表示式 let a async function 複製 async形式的箭頭函式 let a async 複製 async與await例項應用,基礎 控制器呼叫與server中查詢資料 exports.getbloglist asy...

async和await的使用

async其實是es7的才有的,是非同步操作的進化,其實就是封裝乙個promise的物件返回 async function test console.log test promiseasync方法在普通的函式前加上 async 關鍵字即可。執行這個函式,發現並沒有返回1111,而是通過promise...

await和async的機制

await 一般會和 async 一起使用,async 是非同步,await則是等待非同步的返回值。可以看下面的測試 public async task string call public async task int foo 執行結果 1 3 4 2這裡在await 後的方法執行完之後,才會向下...