Как обработать запрос axios.all не удалось - PullRequest
0 голосов
/ 11 мая 2018

Как я могу обработать запрос с ошибками в этом примере запросов axios.all.Т.е. если все серверы отвечают JSON, то все в порядке, и у меня есть файл JSON в конце цикла.Но если один из этих серверов не отвечает JSON или не отвечает вообще, у меня ничего нет в файле "/data.json", даже все остальные серверы работают отлично.Как я могу поймать сбой сервера и пропустить его?

var fs = require("fs");
var axios = require('axios');
var util = require('util');
var round = 0;
var tmp = {};

var streem = fs.createWriteStream(__dirname + '/data.json', {flags : 'w'});

toFile = function(d) { //
  streem.write(util.format(d));
};
start();
setInterval(start, 27000);

function start(){
    streem = fs.createWriteStream(__dirname + '/data.json', {flags : 'w'});
    monitor();
}

function monitor(){

    axios.all([
    axios.get('server1:api'),
    axios.get('server2:api'),
    axios.get('server3:api'),
    axios.get('server4:api'),
    ]).then(axios.spread((response1, response2, response3, response4) => {

        tmp.servers = {};
        tmp.servers.server1 = {};
        tmp.servers.server1 = response1.data;

        tmp.servers.server2 = {};
        tmp.servers.server2 = response2.data;

        tmp.servers.server3 = {};
        tmp.servers.server3 = response3.data;

        tmp.servers.server4 = {};
        tmp.servers.server4 = response4.data;

        toFile(JSON.stringify(tmp));

        round++;

        streem.end();
        streem.on('finish', () => {
            console.error('Round: ' + round);
        });             

    })).catch(error => {
      console.log(error);
    });
}

1 Ответ

0 голосов
/ 11 мая 2018

Самым стандартным способом решения этой проблемы была бы рекурсивная функция, как показано ниже.

let promises = [
    axios.get('server1:api'),
    axios.get('server2:api'),
    axios.get('server3:api'),
    axios.get('server4:api'),
];

async function monitor() {
    const responses = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments))[0];
    const nextPromise = promises.shift();

    if (nextPromise) {
        try {
            const response = await getSentenceFragment(offset);
            responses.push(response);
        }
        catch (error) {
            responses.push({});
        }

        return responses.concat(await monitor(responses));
    } else {
        return responses;
    }
}


monitor([]).then(([response1, response2, response3, response4]) => {
    tmp.servers = {};
    tmp.servers.server1 = {};
    tmp.servers.server1 = response1.data;

    tmp.servers.server2 = {};
    tmp.servers.server2 = response2.data;

    tmp.servers.server3 = {};
    tmp.servers.server3 = response3.data;

    tmp.servers.server4 = {};
    tmp.servers.server4 = response4.data;

    toFile(JSON.stringify(tmp));

    round++;

    streem.end();
    streem.on('finish', () => {
        console.error('Round: ' + round);
    });             
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...