javascript - 编写一个可以与带有 axios 输出的 then() 链接的函数

标签 javascript node.js asynchronous

这是我正在编写的一个函数,用于使用 axios 与 api 进行通信。我正在努力让这个函数返回一个数组。我知道我从中得到了一个 promise ,但是当我将 then() 链接到我的函数并意图使用 promise 中的数据时,它什么也没有。我可以放入 console.log(reqs) 而不是返回值,它将打印我感兴趣的数据以及顶部的“未定义”行,尽管我不太确定为什么。我试图避免使用 console.log,但尽可能测试我的函数,因为我不希望从控制台查看此数据。

这是我的功能。

async function getMembers(omeIp,omeUser,omePass) {
    var reqs = [];
    axios({
        method: 'get',
        url: `https://${omeIp}/redfish/v1/Systems/Members`,
        auth: {
            username: omeUser,
            password: omePass
        },
        httpsAgent: new https.Agent({
            rejectUnauthorized: false
        }),
        headers: {'Self-Signed-Header': 'certificate'}
    }).then((res) => {
        value = res.data['value'];
        for(var key in value) {
            let member =  value[key]['@odata.id'];
            reqs.push(member);
        }
        return reqs;
    }).catch((err) => {
        console.log(err);
    });
};
module.exports = {
        getMembers,
};

这就是我所说的。

const {getMembers} = require('./functions.js');

var omeIp = "100.73.32.21",
    omeUser = "admin",
    omePass = "Sq%9A&pEBP";

getMembers(omeIp,omeUser,omePass).then((res) => console.log(res));

如何从函数中获取结果,以便将 then() 链接到末尾并使用 Promise 的内容?或者有更好的方法吗?

最佳答案

编辑:感谢 Sebastian 提醒我 Promise 链的存在。现在这个答案已经大大简化了。

.then().catch()Promise 对象上的方法。要让函数的调用者访问它们,您所需要做的就是返回由 axios 创建的 Promise 对象:

function getMembers(omeIp, omeUser, omePass) {
  return axios({
    method: 'get',
    url: `https://${omeIp}/redfish/v1/Systems/Members`,
    auth: {
      username: omeUser,
      password: omePass
    },
    httpsAgent: new https.Agent({
      rejectUnauthorized: false
    }),
    headers: {
      'Self-Signed-Header': 'certificate'
    }
  }).then((res) => {
    const reqs = [];
    value = res.data['value'];
    for (var key in value) {
      let member = value[key]['@odata.id'];
      reqs.push(member);
    }

    return reqs;
  }).catch((err) => {
    console.log(err);
  });
};

然后您可以像这样使用您的函数:

getMembers(A, B, C).then(reqs => {
  // Do something with reqs if getMembers is successful
});

关于javascript - 编写一个可以与带有 axios 输出的 then() 链接的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53621706/

相关文章:

javascript - 按多个值过滤对象数组

javascript - 当只选择一个元素时,为什么我的 if 语句返回大于 1 的值?

javascript - 动态数据处理之Highcharts问题

javascript - bxslider 将 .next 按钮绑定(bind)到轮播中的下一张幻灯片

node.js - 向后兼容 es6 Node 库开发的最佳实践

javascript - socket.io 客户端挂起

javascript - 创建模型时 Sequelize 连接错误

reactjs - 如何在异步函数中使用 setState

c# - 深入理解 ASP.NET MVC 上的 async/await

Python 网络服务器 : How to serve requests asynchronously