Node.js 使用带有异步函数和setTimeout的while循环。Nodejs

Node.js 使用带有异步函数和setTimeout的while循环。Nodejs,node.js,async-await,Node.js,Async Await,我正在尝试创建一个测试,以验证我是否已将项放入dynamoDB表中。为了做到这一点,在我打了一个应该将项目(车辆)放入数据库的电话之后,我正试图从数据库中获取车辆 在我的测试中,我希望有最大的重试次数(5次)。我希望这个while循环阻塞线程,直到我的查询解决了提供一辆车,或者尝试了5次。在我的测试中,我有: let count = 0 let car while (!car || count < 5) { setTimeout(async () =

我正在尝试创建一个测试,以验证我是否已
项放入dynamoDB表中。为了做到这一点,在我打了一个应该
项目(车辆)放入数据库的电话之后,我正试图
从数据库中获取
车辆

在我的测试中,我希望有最大的重试次数(5次)。我希望这个while循环阻塞线程,直到我的查询解决了提供一辆车,或者尝试了5次。在我的测试中,我有:

    let count = 0
    let car
    while (!car || count < 5) {
        setTimeout(async () => {
            car = await findVehicle(greenCar.vehicleInfo)
        }, 3000)
        count++
    }
let count=0
出租汽车
而(!car | | count<5){
setTimeout(异步()=>{
car=等待查找车辆(绿色汽车.车辆信息)
}, 3000)
计数++
}

findVehicle
是一个异步函数,它从dynamoDB表中执行
获取
,如果您想等待每次迭代,可以执行以下操作:

let count = 0;
let car;

while (!car || count < 5) {

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

    count++
}
let count=0;
出租汽车;
而(!car | | count<5){
等待新的承诺((决心)=>
setTimeout(异步()=>{
car=等待查找车辆(绿色汽车.车辆信息);
解决();
}, 3000));
计数++
}

因此,您正在解决在获得数据后等待的承诺。此外,为了使用wait,您的函数必须是异步的。希望这有帮助。

setTimeout
不会返回一个
承诺,
等待setTimeout
没有意义这是一个输入错误,你现在有什么问题?@AlexG这是一个无限循环井,你正在增加setTimeout中的计数。。你应该在它下面增加它。