для цикла асинхронного в узле JS - PullRequest
0 голосов
/ 31 октября 2019

Привет, у меня есть цикл for в моем приложении js node, которое вызывает асинхронную функцию. Я хочу проверить значение и решить, найден клиент или нет. Но цикл повторяется до последнего элемента. Следовательно, мой цикл ошибок не работает. Я хочу, чтобы цикл проверил ответ и затем повторил следующий цикл.

для цикла:

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 и пытается понять концепцию асинхронного ожидания. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 31 октября 2019

Асинхронная функция ожидает возврата 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);
            });
        });
    }
}
...