axios 函数返回undefined,尽管console.log在返回前显示值

lmvvr0a8  于 2023-11-18  发布在  iOS
关注(0)|答案(1)|浏览(113)

我试图通过axios调用从node js中的一个promise函数返回一个数组。axios调用工作正常,console.log向我显示了我在返回的promise的数据对象中查找的数组。但是当我使用console.log查看函数外部的函数结果时,它显示“undefined”。

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,而不将其放在元素中,但结果是一样的。

gpnt7bae

gpnt7bae1#

如果有人有这个问题,我终于弄明白了。问题是使用

.then((results)

字符串
因为我正在调用另一个函数,所以“return”是为它而不是外部函数发送的,所以外部函数在没有“return”的情况下完成。
这个问题有两个解决办法:
1.(我选择的那个)改变结构不使用.然后按以下方式:
usersFile = await axios.get(settings.url,auth,options); usersFile = usersFile.data;
1.使用内部函数的结果添加另一个返回值。

相关问题