尽管控制台 .log 在返回前显示值,但函数仍返回未定义

Function returns undefined despite console.log showing value before return

提问人:Nimrod Yanai 提问时间:10/12/2023 更新时间:10/19/2023 访问量:21

问:

我正在尝试通过 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,而不将其放入元素中,但结果是一样的。

node.js 函数 async-await axios 返回

评论


答:

0赞 Nimrod Yanai 10/19/2023 #1

如果有人有这个问题,我终于想通了。 问题在于使用

.then((results)

因为我正在调用另一个函数,所以为它发送了“return”而不是外部函数,所以外部函数在没有“return”的情况下完成。

此问题有两种解决方案:

  1. (我选择的那个)通过以下方式将结构更改为不使用 .then:

    usersFile = 等待 axios.get(settings.url,auth,options); usersFile = 用户File.data;

  2. 添加另一个包含内部函数结果的返回值。