异步函数的数据调用

通过写回调函数

由于setTimeout走的是异步,所以先执行到name2,在setTimoout执行完成之后执行回调,调用getName函数,将name值打印出来

 function people (fn) {
    var name = '小明'
    setTimeout(function () {
      name = '小黑'
      fn(name)
    })
    return fn(name)
  }
  function getName (name) {
    console.log('name', name)
    return name
  }
  var name2 = people(getName)
  console.log('name2', name2)
  

用promise方法

上面的方法虽然能完成需求,但用起来很费劲,感觉绕来绕去的。如果兼容性要求没那么高,当然还是用Promise方法更方便。虽要随取,没毛病。

  function people () {
    var name = '小明'
    return new Promise(resolve => {
      setTimeout(function () {
        name = '小黑'
        resolve(name)
      })
    })
  }
  var getName = people().then(res => {
    console.log(res)
  })
  

随机浏览