Получить неопределенный при возврате значения из массива - Node JS - PullRequest
0 голосов
/ 19 сентября 2018

Я новичок в NodeJS, и у меня возникают некоторые трудности с его асинхронной природой.

Я запрашиваю некоторые данные, используя асинхронную функцию.Моя вторая функция используется для получения идентификатора, зная имя (обе данные хранятся в данных, возвращаемых первой функцией).

Каждый раз, когда я получаю 'Found it' в консоли, но возвращение выполняется до завершения цикла, и я получаю 'undefined'.

Должен ли я использовать обратный вызов или использовать async& Ждите ?Даже после большого количества исследований об асинхронности, ожидании и обратных вызовах я не могу найти способ заставить его работать!

async function getCustomers() {
        try {
             var customers = await axios({
                //Query parameters
            });
            return customers;
        }
        catch (error) {
            console.log(error);
        }
    }


function getCustomerId(customerName){
        var customerId = null;
        getCustomers().then(function(response){
            for (const  i of response.data){
                console.log(i['name']);

                if(i['name'] == customerName){
                    console.log('Found it !'); //This got displayed in the console
                    customerId = i['id'];
                    return customerId; //This never return the desired value
                    }
                }
            });

    }

console.log(getCustomerId('abcd'));

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 19 сентября 2018

Вы печатаете вывод getCustomerId, но он ничего не возвращает.

Попробуйте вернуть Обещание с:

return getCustomers().then(function(response) {...});

И затем вместо:

console.log(getCustomerId('abcd'));

Вы должны попробовать:

getCustomerId('abcd').then(function(id) {console.log(id);})

Так что вы уверены, что Обещание разрешено, прежде чем пытаться отобразить его вывод

...