我们在写项目的时候有没有遇到这样的一个情况:一个函数里,嵌套着另一个异步函数,那如何在外面获取这个异步函数的结果呢?(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函数,我们就可以拿到成功的回调值。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐