JavaScript 从 setTimeout 获取返回值

说明

  1. t() 函数中有 setTimeout,要返回 AAA
  2. my() 函数中,调用 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) 

}

原文出处:/show_1IX8X0Lx6P29.html