在 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)
}
}
我正在尝试在 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)
}
}