JavaScript等待回调函数结束

有的时候需要等待回调函数结束,或者用到回调函数的返回值。
可以使用Promise来实现这个目标。

问题

考虑一个包含回调函数的函数 timeout(fun)

function timeout (fun) {
  setTimeout(fun.bind(this, 1), 1000)
}

调用函数如下

timeout(function (num) {
  console.log(num)
})
console.log(2)

会输出

2
1

解决办法

可以把包含回调函数的函数调用放在Promise中,之后的语句放在then中。

new Promise((resolve, reject) => {
  timeout(function (num) {
    console.log(num)
    resolve()
  })
}).then(() => {
  console.log(2)
})

会输出

1
2

使用async & awiat

可以结合es7的新特性async await,或者利用yield co简化代码。

(async function main () {
  await new Promise((resolve, reject) => {
    timeout(function (num) {
      console.log(num)
      resolve()
    })
  })
  console.log('after', 2)
})()
    原文作者:liuzihe
    原文地址: https://www.jianshu.com/p/f0c890680f08
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞