Будете ли вы ждать возвращаемого значения в асинхронной функции? - PullRequest
0 голосов
/ 19 декабря 2018
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 ]

0 голосов
/ 19 декабря 2018

Что ж, возвращение раньше, чем раньше, не будет иметь никакого значения, но ожидание перед вызовом функции будет иметь значение. См. Фрагменты кода ниже.

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()
0 голосов
/ 19 декабря 2018

Практически, они одинаковы, поскольку в JS есть автоматическое развертывание Обещаний.Используйте то, что вам удобнее / удобнее для чтения.


Сказав это,

Семантически, с await вы возвращаете Promise<T>, тогда как без await вы семантически возвращается Promise<Promise<T>>.(Опять же, чтобы уточнить, оба результата на практике дадут один и тот же результат и даже точно такой же тип возврата.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...