0
点赞
收藏
分享

微信扫一扫

外部读取异步方法的数据

尤克乔乔 2022-02-28 阅读 32

获取异步操作的数据

1. 错误方法

function getData(){
    setTimeout(function(){
        var name='yzy';
        return name //  位置1
    },1000)
    return name  //  位置2
}

console.log(getData())

当执行函数getData时,setTimeout为异步任务,此时函数中无法立即执行setTimeout函数

  • 如果在位置1返回,此时函数体内部没有任何语句,最后将在控制台输出undefined
  • 如果在位置2返回,此时函数体内部只有return name,由于name没有定义,最后将会报错

2. 解决方法

2.1 用回调函数

function getData(callback){
    setTimeout(function(){
        var name='yzy';
        callback(name)
    },1000)
}

getData(function(aaa){
    console.log(aaa) //1s后输出yzy
})

2.2 用Promise.then的方法

function getData(resolve, reject) {
  setTimeout(function () {
    var name = 'yzy'
    resolve(name)
  }, 1000)
}

var p = new Promise(getData)

p.then(function (data) {
  console.log(data)
})

原理:将任务包装为一个异步微任务,不会阻碍其他任务的执行

2.3 用async、await方法

async function test() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      var name = 'yzy'
      resolve(name)
    }, 1000)
  })
}

async function main() {
  var data = await test()
  console.log(data) //返回值为 'aaaa'
}

main()
举报

相关推荐

0 条评论