Я новичок в NodeJS, и у меня возникают некоторые трудности с его асинхронным характером.
Я запрашиваю некоторые данные с помощью асинхронной функции. Моя вторая функция используется для получения идентификатора, зная имя (обе данные хранятся в данных, возвращаемых первой функцией).
Каждый раз, когда я получаю в консоли «Нашел», но возврат выполняется до завершения цикла, и я получаю «undefined».
Должен ли я использовать обратный вызов или использовать async & await? Даже после многих исследований асинхронности и ожидания и обратных вызовов я не могу придумать, как заставить его работать!
async function getCustomers() {
try {
var customers = await axios({
//Query parameters
});
return customers;
}
catch (error) {
console.info(error);
}
}
function getCustomerId(customerName){
var customerId = null;
getCustomers().then(function(response){
for (const i of response.data){
console.info(i['name']);
if (i['name'] == customerName){
console.info('Found it !'); //This got displayed in the console
customerId = i['id'];
return customerId; //This never return the desired value
}
}
});
}
console.info(getCustomerId('abcd'));
Спасибо за любую предоставленную помощь!
Возможный дубликат Как мне вернуть ответ от асинхронного вызова?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы печатаете вывод getCustomerId, но он ничего не возвращает.
Попробуйте вернуть обещание с помощью:
return getCustomers().then(function(response) {...});
И тогда вместо:
console.info(getCustomerId('abcd'));
Ты должен попытаться:
getCustomerId('abcd').then(function(id) {console.info(id);})
Чтобы вы были уверены, что обещание разрешено, прежде чем пытаться отобразить его вывод
Вы правы! Теперь, когда вы это отметили, это кажется очевидным! Мне нужно дождаться завершения работы getCustomerId перед отображением. Большое спасибо @martin!
Возможный дубликат Почему моя переменная не изменяется после того, как я изменяю ее внутри функции? - Ссылка на асинхронный код