说明
t()函数中有setTimeout,要返回AAAmy()函数中,调用t()函数,要获取AAA
function t(){
setTimeout(() => {
// 有返回值 'AAA'
},1000);
}
function my(){
// 在此处获取 t() 中的 'AAA'
}
my()
解决
回调函数实现
好处:易于理解
缺点:需要破坏 t() 函数的参数
function t(callback){
setTimeout(() => {
callback('AAA')
},1000);
}
function my(){
const res = t( function(res){
console.log("setTimeout返回值:",res)
})
}
my()
Promise 实现
好处:没有破坏 t() 函数的参数
缺点:代码有点多
function t(){
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('AAA') // AAA会传给 then 中的 data
},1000);
});
}
function my(){
t().then(function(data){
console.log("setTimeout返回值:",data)
})
}
async、await实现
好处:没有破坏 t() 函数的参数,比 Promise 实现方式简单
缺点:需要理解 async、await 写法,需要改动原函数的修饰
async function t(){
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('AAA') // AAA会传给 then 中的 data
},1000);
});
}
// 普通函数实现
async function my(){
const res = await t()
console.log("setTimeout返回值:",res)
}