javascript - 编写一个可以与 then() 与 axios 输出链接的函数
问题描述
这是我正在编写的一个函数,用于使用 axios 与 api 对话。我正在努力让这个函数返回一个数组。我知道我从中得到了一个承诺,但是当我将 then() 链接到我的函数上以使用来自承诺的数据时,它什么都没有。我可以输入一个 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
对象上的方法。要让函数的调用者访问它们,您需要做的就是返回由Promise
创建的对象axios
:
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
});
推荐阅读
- angular - Angular7 Material7 网格列表项目顺序/流程不随 flex-layout 改变?
- c# - 找出此 Web 服务失败的原因
- javascript - Sequelize关联json响应问题
- elixir - Phoenix:是否可以从控制器更新存在?
- sas - SAS:计算中位数、最小值和最大值时如何包含零或缺失值?
- javascript - 登录后保持会话 - selenium - javascript
- twilio - 转换 TWIML(Gather and Dial)以使用 API 和 VOIP
- ios - 用户从 iPhone/iPad(任何浏览器)专门访问时无法加载网站,甚至无法留下服务器日志
- windows - Windows OpenFile 标志
- rubygems - 一个人如何一起开发一对宝石,一个使用另一个?