提问人:Nimrod Yanai 提问时间:10/12/2023 更新时间:10/19/2023 访问量:21
尽管控制台 .log 在返回前显示值,但函数仍返回未定义
Function returns undefined despite console.log showing value before return
问:
我正在尝试通过 axios 调用从节点 js 中的异步函数返回一个数组。 axios 调用工作正常,console.log 向我显示我在返回的 promise 的数据对象中查找的数组。 但是当我使用 console.log 查看函数外部的函数结果时,它显示“未定义”。
async function userImport (settings, file) {
let usersFile;
const auth = {
"username": settings.authentication.user,
"password": settings.authentication.password
};
const options = {
method: 'get',
headers: {
},
timeout: 10000
};
await axios.get(settings.url,auth,options)
.then((results) => {
usersFile = results.data;
console.log(usersFile);
if (usersFile && usersFile != "" && usersFile != undefined) {
console.log("Test1");
return [usersFile,settings.encoding];
} else {
console.log("Test2");
return results;
}
})
}
await userImport(settings, file)
.then(async (users)=>{
console.log(users);
})
我得到的结果是:
[{...},{...},{...}] //The array I'm looking for
Test1
Undefined
我期望得到的是:
[{...},{...},{...}] //The array I'm looking for
Test1
[{...},{...},{...}] //The array I'm looking for
我尝试将数组放入 json 对象中,如下所示:
let usersFile = {};
usersFile.users = results.data;
然后我得到:
{users:[{...},{...},{...}]} //The array I'm looking for
Test1
Undefined
我还尝试直接返回 results.data,而不将其放入元素中,但结果是一样的。
答:
0赞
Nimrod Yanai
10/19/2023
#1
如果有人有这个问题,我终于想通了。 问题在于使用
.then((results)
因为我正在调用另一个函数,所以为它发送了“return”而不是外部函数,所以外部函数在没有“return”的情况下完成。
此问题有两种解决方案:
(我选择的那个)通过以下方式将结构更改为不使用 .then:
usersFile = 等待 axios.get(settings.url,auth,options); usersFile = 用户File.data;
添加另一个包含内部函数结果的返回值。
评论