在 for 循环中调用 Grpc 网关

Calling Grpc gateway inside the for loop

我正在尝试在 for 循环中使用节点 js 和 "@grpc/grpc-js": "^1.3.0" 调用 grpc API,并希望将结果 response 存储在数据库中。该数字包含超过 10000 个值。我想一件件去取。但是,如果我使用 for 循环,它不会等到所有进程完成。有什么办法可以在执行 grpc 调用后增加 for 循环中的数字并将数据保存在数据库中完成。

数 = 100000

async function SaveNumber(number,client) {
    for (var i = 1; i <= number; i++) {
        console.log(i)
        client.GetNumberDetails({ "number": i }, async function (err, response) 
           {
            if (err) {
                console.log(err)
            } else {
                await dbSave.SaveNumberDetails(response)
            }

        })    
    }
 }

问题是您没有在等待对 GetNumberDetails 的呼叫。您可以将调用包装到 Promise 中并等待它。

async function SaveNumber(number,client) {
  for (var i = 1; i <= number; i++) {
    console.log(i)
    const response = await new Promise((resolve, reject) => {
       client.GetNumberDetails({ "number": i }, function (err, response) {
          if (err) {
            reject(err);
          } else {
            resolve(response);
          }
       });
    });
    await dbSave.SaveNumberDetails(response)
  }
}