代码之家  ›  专栏  ›  技术社区  ›  exebook

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

  •  1
  • exebook  · 技术社区  · 6 年前
    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()
    

    我看不出有什么不同,但我想知道在异步函数中等待异步返回值是否更好?选择一种解决方案而不是另一种解决方案的原因是什么?是否有任何性能、可移植性、可用性或语义方面的考虑?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Madara's Ghost    6 年前

    实际上,它们是一样的,因为JS可以自动打开承诺。使用您觉得更舒服/更容易阅读的选项。


    话虽如此,

    语义上 await Promise<T> 鉴于没有 等候 你是 返回 Promise<Promise<T>>

        2
  •  0
  •   Code Maniac    6 年前

    Well return before ahead不会有任何区别,但是wait before调用函数会有区别。请参阅下面的代码片段。

    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()