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

Javascript 编写一个函数,该函数可以与带有axios输出的then()链接,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在编写一个函数,用于使用axios与api进行对话。我正在努力让这个函数返回数组。我知道我从中得到了一个承诺,但当我将then()链接到我的函数上,意图使用来自承诺的数据时,它没有任何内容。我可以输入console.log(reqs)而不是返回值,它将打印我感兴趣的数据以及顶部的“未定义”行,尽管我不太清楚为什么。我试图避免使用console.log,但在可能的情况下测试我的函数除外,因为我不希望从控制台查看这些数据 这是我的功能。 这就是我所说的 const{getMembers}=r

我正在编写一个函数,用于使用axios与api进行对话。我正在努力让这个函数返回数组。我知道我从中得到了一个承诺,但当我将then()链接到我的函数上,意图使用来自承诺的数据时,它没有任何内容。我可以输入console.log(reqs)而不是返回值,它将打印我感兴趣的数据以及顶部的“未定义”行,尽管我不太清楚为什么。我试图避免使用console.log,但在可能的情况下测试我的函数除外,因为我不希望从控制台查看这些数据

这是我的功能。

这就是我所说的

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,
};