используя цикл while с асинхронной функцией и setTimeout.Nodejs - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь создать тест, чтобы убедиться, что у меня put элемент в таблице DynamoDB.Чтобы сделать это, сразу после того, как я позвонил, который должен put Предмет (транспортное средство) в базе данных, я пытаюсь get транспортное средство из БД.

В моем тесте я хочу сделать максимальное количество попыток (5).Я хочу, чтобы этот цикл while блокировал поток до тех пор, пока мой запрос не разрешит предоставить транспортное средство или не будет выполнен 5 раз.Внутри моего теста у меня есть:

    let count = 0
    let car
    while (!car || count < 5) {
        setTimeout(async () => {
            car = await findVehicle(greenCar.vehicleInfo)
        }, 3000)
        count++
    }

И findVehicle - это асинхронная функция, которая выполняет get из таблицы DynamoDB

1 Ответ

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

Если вы хотите дождаться каждой итерации, вы можете сделать это:

let count = 0;
let car;

while (!car || count < 5) {

    await new Promise((resolve) =>
        setTimeout(async () => {
            car = await findVehicle(greenCar.vehicleInfo);
            resolve();
        }, 3000));

    count++
}

Таким образом, вы выполняете обещание, которое ожидаете после получения ваших данных.Также ваша функция должна быть асинхронной, чтобы использовать await.Надеюсь, это поможет.

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