这是我正在编写的用于使用axios与api对话的函数。我正在努力让这个函数返回一个数组。我知道我从中得到了一个承诺,但是当我将then()链接到函数上以使用承诺中的数据时,它就什么也没有。我可以输入console.log(reqs)而不是返回值,它会在顶部显示“我的数据”以及“ undefined”行,尽管我不确定原因。我试图避免使用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的内容?还是有更好的方法做到这一点?
答案 0 :(得分:0)
编辑:感谢塞巴斯蒂安提醒我有关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
});