Написание функции, которая может быть связана с then () с выходом axios - PullRequest
0 голосов
/ 05 декабря 2018

Вот функция, которую я пишу, чтобы поговорить с API, используя axios.Я пытаюсь заставить эту функцию возвращать массив.Я понимаю, что из этого получаю обещание, но когда я включаю функцию 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 () с концом и использовать содержимое обещания?или есть лучший способ сделать это?

1 Ответ

0 голосов
/ 05 декабря 2018

РЕДАКТИРОВАТЬ: Спасибо Себастьяну за напоминание о существовании цепочки 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...