当你发起一个异步操作时,你不能通过简单的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
函数希望获得一个回调函数作为它的第二个参数。