我们在写项目的时候有没有遇到这样的一个情况:一个函数里,嵌套着另一个异步函数,那如何在外面获取这个异步函数的结果呢?(return值)
就比如这样一个例子:
function fn() {
setTimeout(function(){
let data = 222
},2000)
}
我们如何获取定时器中data的值呢?
方法一 传入回调函数
function fn(callback) {
setTimeout(function(){
let data = 222
callback(data)
},2000)
}
fn(function(data){
console.log(data) // 222
})
我们巧妙地在fn里传入一个回调函数,在定时器函数中调用这个回调函数,并把定时器函数中的结果通过函数传参的形式带出来,这样我们就可以通过fn的回调获取到结果了!
其实,这样的操作也被称为 —— 封装异步API(封装异步函数)
我们通过fn函数,将定时器异步函数进行封装。
方法二 Promise
function fn() {
return new Promise(function (resolve, reject) {
setTimeout(function () {
let data = 222
resolve(data)
}, 2000)
})
}
fn().then(function(data) {
console.log(data)
})
用Promise将异步函数进行包裹,在调用fn时会返回一个Promise实例,调用Promise实例的then函数,我们就可以拿到成功的回调值。