Ожидать несколько асинхронных функций, но продолжить после завершения - PullRequest
2 голосов
/ 01 ноября 2019

Я пытаюсь написать функцию, которая выполняет поиск с использованием 2 алгоритмов. Основная функция должна вызывать обе основные функции алгоритма одновременно, но продолжить, как только завершится. Это также должно остановить запуск другой функции.

В настоящее время у меня настроена функция ввода, подобная этой:

async function entry(code) {

    let [ product_algorithm_1, product_algorithm_2 ] = await Promise.all([
        get_info_algorithm_1(code),
        get_info_algorithm_2(code)
    ])

    // Here I would check which variable is not empty, and display the results
}

Это работает нормально, но проблема в том, что она ожидает обе функциизакончить, прежде чем продолжить. Я пытаюсь продолжить, когда один заканчивает работу, и удаляю процесс других. Кто-нибудь знает, как этого добиться?

1 Ответ

4 голосов
/ 01 ноября 2019

То, что вы ищете, это Promise.race(). Он вернется, когда один из вызовов будет разрешен. Узнайте больше о MDN .

async function entry(code) {

    let product_algorithm_fastest = await Promise.race([
        get_info_algorithm_1(code),
        get_info_algorithm_2(code)
    ])
}

Стоит отметить, что возвращаемое значение будет соответствовать обещанию, которое было "самым быстрым"

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