有的時候需要等待回調(diào)函數(shù)結(jié)束,或者用到回調(diào)函數(shù)的返回值萝喘。
可以使用Promise來實現(xiàn)這個目標(biāo)淮逻。
問題
考慮一個包含回調(diào)函數(shù)的函數(shù) timeout(fun)
function timeout (fun) {
setTimeout(fun.bind(this, 1), 1000)
}
調(diào)用函數(shù)如下
timeout(function (num) {
console.log(num)
})
console.log(2)
會輸出
2
1
解決辦法
可以把包含回調(diào)函數(shù)的函數(shù)調(diào)用放在Promise
中,之后的語句放在then
中蜒灰。
new Promise((resolve, reject) => {
timeout(function (num) {
console.log(num)
resolve()
})
}).then(() => {
console.log(2)
})
會輸出
1
2
使用async & awiat
可以結(jié)合es7
的新特性async
await
弦蹂,或者利用yield
co
簡化代碼。
(async function main () {
await new Promise((resolve, reject) => {
timeout(function (num) {
console.log(num)
resolve()
})
})
console.log('after', 2)
})()