javascript - 节点js中的for循环异步
问题描述
嗨,我的节点 js 应用程序中有一个 for 循环,它调用异步函数。我想检查一个值并确定是否找到了客户。但是循环迭代直到最后一个元素。因此我的错误循环不起作用。我希望循环检查响应,然后迭代下一个循环。
for循环:
for (let i = 0; i < customerlookupresponse.data.length; i++) {
var customer = customerlookupresponse.data[i];
if (customer != undefined) {
console.log("customer.id :: " + customer.id)
var accountlookUpData = {
customerId: customer.id
};
customerAccountLookUpRequest(accountlookUpData).then(data => {
console.log("----" + i + " -- " + data);
if (data && data.status === 1) {
resolve(data);
return;
}else{
reject({
status: 404,
message: "Customer not found"
});
return;
}
});
} else {
reject({
status: 404,
message: "Customer not found"
});
return;
}
}
异步函数:
async function customerAccountLookUpRequest(customerLookUpData) {
var accountLookUp = config.app.url;
let data = await axios.get(accountLookUp).then(accountLookUpResult => {
for (i = 0; i < accountLookUpResult.data.length; i++) {
var requestaccount = accountLookUpResult.data[i].accountNumber;
if (requestaccount == customerLookUpData.lookupAccount) {
accountLookUpResult.data[i].customerId = customerLookUpData.customerId;
accountLookUpResult.data[i].status = 1;
return accountLookUpResult.data[i];
}
}
});
return data;
}
我是节点 js 的新手,并试图理解异步等待的概念。请帮忙。
解决方案
异步函数等待 Promise 返回。具有循环的函数应声明为 async,并且 customerAccountLookUpRequest 函数应返回一个承诺。然后使用 await 运算符调用该函数。简单的例子:
class some_class {
constructor() {
}
async my_loop() {
let _self = this;
for (let i = 0; i < customerlookupresponse.data.length; i++) {
let data = await _self.customerAccountLookUpRequest(accountlookUpData);
console.log("----" + i + " -- " + data);
}
}
customerAccountLookUpRequest(customerLookUpData) {
return new Promise((resolve, reject) => {
axios.get(accountLookUp).then(accountLookUpResult => {
resolve(accountLookUpResult);
});
});
}
}
推荐阅读
- c# - 在 Rest Api C# 中将大字节数组添加到 Post 请求参数
- python-3.x - 为什么我的 Jupyter Notebook 即使在 Python3 上也使用 ascii 编解码器?
- typescript - Angular 9 - Karma - 在 window.scroll 多态性上的间谍
- windows - BASH:确定脚本是从虚拟机 (Ubuntu) 还是 W10 bash 应用程序调用的?
- android - Android 应用程序特定文件和共享存储
- swift - 应用程序崩溃:异常 - 无法识别的选择器发送到实例
- tensorflow - 如何在tensorflow中生成伯努利张量
- python - 如何使用 Python 将 zipfile 从一个文件夹复制到另一个文件夹
- ios - SwiftUI:如何隐藏设置标题但不设置导航栏的大空间?
- html - 使用 Google reCaptcha v3 获得低分的最佳用户体验?