“正在返回”的异步结果

当你发起一个异步操作时,你不能通过简单的return语句获得结果。让我们来看看,你有一个函数,其中包裹了一个异步函数调用。如果你创建了一个变量,并且在回调函数调用中对其赋值,然而你不能在外部函数中通过简单的return来获得异步函数中的结果。

function getData(options) {
  var finalResult
  asyncTask(options, function(err, result) {
    finalResult = result
  })
  return finalResult
}
getData() // -> returns undefined

上面的代码片段中,当你调用getData函数,它会立即执行并返回undefined。这是因为该函数调用时,finalResult没有被赋值。它需要等待一段时间,然后才会对finalResult执行赋值操作。正确的做法是,使用一个外部函数将异步调用包装起来,并将一个回调函数传入到异步操作中:

function getData(options, callback) {
  asyncTask(options, callback)
}
getData({}, function(err, result) {
  if (err) return console.log(err)
  console.log(result)
})

上面的代码片段中,我们定义了一个getData函数,它接受一个回调函数作为第二个参数。我们把它命名了callback以便更清晰地表明:getData函数希望获得一个回调函数作为它的第二个参数。

用户头像
登录后发表评论