Javascript 编写一个函数,该函数可以与带有axios输出的then()链接
我正在编写一个函数,用于使用axios与api进行对话。我正在努力让这个函数返回数组。我知道我从中得到了一个承诺,但当我将then()链接到我的函数上,意图使用来自承诺的数据时,它没有任何内容。我可以输入console.log(reqs)而不是返回值,它将打印我感兴趣的数据以及顶部的“未定义”行,尽管我不太清楚为什么。我试图避免使用console.log,但在可能的情况下测试我的函数除外,因为我不希望从控制台查看这些数据 这是我的功能。 这就是我所说的Javascript 编写一个函数,该函数可以与带有axios输出的then()链接,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在编写一个函数,用于使用axios与api进行对话。我正在努力让这个函数返回数组。我知道我从中得到了一个承诺,但当我将then()链接到我的函数上,意图使用来自承诺的数据时,它没有任何内容。我可以输入console.log(reqs)而不是返回值,它将打印我感兴趣的数据以及顶部的“未定义”行,尽管我不太清楚为什么。我试图避免使用console.log,但在可能的情况下测试我的函数除外,因为我不希望从控制台查看这些数据 这是我的功能。 这就是我所说的 const{getMembers}=r
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()
和.catch()
是Promise
对象上的方法。要让函数调用方访问它们,只需返回由axios
创建的Promise
对象:
函数getMembers(omeIp、omeUser、omePass){
返回轴({
方法:“get”,
url:`https://${omeIp}/redfish/v1/Systems/Members`,
认证:{
用户名:omeUser,
密码:omePass
},
httpsAgent:新的https.Agent({
拒绝:错误
}),
标题:{
“自签名头”:“证书”
}
})。然后((res)=>{
常数要求=[];
value=res.data['value'];
for(var输入值){
让member=value[key]['@odata.id'];
要求推送(成员);
}
退货要求;
}).catch((错误)=>{
控制台日志(err);
});
};
然后,您可以像这样使用您的函数:
getMembers(A,B,C)。然后(reqs=>{
//如果getMembers成功,请对reqs执行一些操作
});
您需要返回axios返回的值返回axios…
Felix所说的,并删除函数中的异步
,因为您不想用与上述相同的承诺来解决您的承诺,尽管请注意,保留异步
并没有什么害处,但如果axios(…)
始终返回承诺,则应该删除它,在这种情况下,它会。如果您想确保函数始终返回承诺,那么将函数标记为async
会很有帮助,因为有时函数中可能有逻辑返回非承诺值,然后您希望将这些值封装在承诺中。@MatthewHerbst,但这不是像promise.resolve(promise.resolve())
?@MatthewHerbst抱歉,我不知道承诺解析到承诺解析到内部承诺的解析值,但是如果axios已经创建了一个承诺,为什么他需要创建一个新的承诺呢?axios的。then()
中的方法已经创建了一个具有所需解析的新承诺values@SebastianSpeitel你当然是对的,我完全忘记了这个功能。更新了我的答案。哇,那是我的疏忽。花了几个小时看着那个斜视的人,我想我忘了什么,结果很容易。谢谢
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,
};