您是否要等待异步函数中的返回值?

时间:2018-12-19 11:52:07

标签: javascript async-await

async function delay(t) {
    return new Promise(f=>setTimeout(f, t))
}

async function delay100() {
    return await delay(100)  //  <---- do we need 'await' here?
}

async function main(){
    await delay100(); console.log('ok')
    await delay100(); console.log('ok')
    await delay100(); console.log('ok')
    await delay100(); console.log('ok')
}

main()

我看不出太大的区别,但是想知道是否更好地执行async函数中的async返回值?是什么原因会优先选择一种解决方案?是否有性能,可移植性,可用性或语义方面的考虑?

2 个答案:

答案 0 :(得分:3)

实际上,它们是相同的,因为JS具有自动展开的Promises。使用任何您觉得自己更舒服/更易读的东西。


话虽如此

通常,使用await返回Promise<T>,而如果没有await,则返回Promise<Promise<T>>。 (再次澄清,实际上两者都会产生完全相同的结果,甚至产生完全相同的返回类型。)

答案 1 :(得分:0)

在返回之前先返回好不会有任何区别,但是在调用函数之前等待会有所不同。请参见下面的代码段。

async function delay(t) {
    return new Promise(f=>setTimeout(f, t))
}

async function delay100(input) {
    return await delay(input)
}

async function main(){
    delay100(100).then(()=>console.log('ok1'));
    delay100(2000).then(()=>console.log('ok2'));
    delay100(140).then(()=>console.log('ok3'));
    delay100(160).then(()=>console.log('ok4'));
}

main()

async function delay(t) {
        return new Promise(f=>setTimeout(f, t))
    }

    async function delay100(input) {
        return delay(input)
    }

    async function main(){
        await delay100(100).then(()=>console.log('ok1'));
        await delay100(2000).then(()=>console.log('ok2'));
        await delay100(140).then(()=>console.log('ok3'));
        await delay100(160).then(()=>console.log('ok4'));
    }

    main()