關於迴圈promise的解決方案

2022-09-22 05:36:33 字數 1345 閱讀 6843

es6的promise物件解決了js非同步**函式多重巢狀的的噩夢,再也不用寫像這樣的**

query('select * from user',function

(err,data) )

})})

而可以像這樣。

query('select * from user')

.then(

function

(data) )

.then(

function

(data) )

.then(

function

(data) )

**的可讀性得到了大大的提升,並且更容易維護。但是promise並不是萬能的,比如說在迴圈中有多個非同步操作,有無窮多個then函式就比較麻煩了,比如這樣

//

查詢訂單及每個訂單的每個商品

query('select * from order')

.then(data =>)

} //

最終需要得到結果

console.log(orders)

})

這裡需要得到最終的結果就比較令人頭疼了,好在es7的async/await非同步方案為我們提供瞭解決方案。node.js7.6已經原生支援async/await,所以把node更新到7.6以上,就可以放心使用啦。async 可以宣告一個非同步函式,此函式需要返回一個 promise 物件。await 可以等待一個 promise 物件 resolve,並拿到結果。比如這樣

async function

sleep(timeout) , timeout);

});}(async

function

() )();

//do some thing, mon feb 23 2015 21:52:11 gmt+0800 (cst)

//do other things, mon feb 23 2015 21:52:14 gmt+0800 (cst)

所以在迴圈promise取得最終結果就可以是這樣

let getorderprod = async data =>

//最終需要得到結果

console.log(orders)

return

new promise((reslove,reject) =>)

}function

f(i) )

})}query('select * from order')

.then(getorderprod).then(data =>)

這樣迴圈非同步操作的問題就解決了。