我是NodeJS的新手,它的异步特性给我带来了一些困难。
我正在使用异步功能请求一些数据。我的第二个函数用于在知道名称的情况下检索ID(两个信息都存储在第一个函数返回的数据中)。
每次我都在控制台中找到“找到它”,但是在循环结束之前执行返回操作,并且得到一个“未定义”。
我应该使用回调还是使用async&await?即使经过大量有关异步,等待和回调的研究,我也无法找到一种使之起作用的方法!
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'));
感谢您提供的任何帮助!
答案 0 :(得分:1)
您正在打印getCustomerId的输出,但不会返回任何内容。
尝试通过以下方式返回承诺:
return getCustomers().then(function(response) {...});
然后,而不是:
console.log(getCustomerId('abcd'));
您应该尝试:
getCustomerId('abcd').then(function(id) {console.log(id);})
因此您可以确保在尝试显示其输出之前已解决Promise问题