【问题标题】:for loop async in node js节点js中的for循环异步
【发布时间】:2019-10-31 16:16:46
【问题描述】:

您好,我的节点 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;
}

我是 node js 的新手,并试图理解异步等待的概念。请帮忙。

【问题讨论】:

  • 如果您不熟悉某个主题,请至少阅读一些介绍/教程,例如MDN for using promisesMDN for async/await,或您选择的任何好的教程。您似乎根本不了解异步函数的用途以及它们的行为方式。

标签: javascript node.js async-await


【解决方案1】:

异步函数等待 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);
            });
        });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2019-05-27
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多