从数组返回值时获取未定义-Node JS

时间:2018-09-19 15:22:19

标签: javascript node.js async-await return-value

我是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'));

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

您正在打印getCustomerId的输出,但不会返回任何内容。

尝试通过以下方式返回承诺:

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

然后,而不是:

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

您应该尝试:

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

因此您可以确保在尝试显示其输出之前已解决Promise问题