Задать вопрос
@de1m

Как дождаться конца request?

У меня есть вот такая функция:
icingaapi.prototype.getHostFiltered = function (filter, callback) {
    var self = this;
    var options = {
        hostname: self.url,
        port: self.port,
        path: '/v1/objects/hosts/',
        method: 'POST',
        rejectUnauthorized: false,
        auth: self.user + ":" + self.pass,
        headers: {
            "Accept": "application/json",
            "Content-Type": "applicatoin/json"
        }
    }
    var req = https.request(options, (res) => {
        res.on('data', (d) => {
            if (res.statusCode == "200") {
              console.log("DATA: " + d);
              var output = JSON.parse(d);

              return callback(null, output.results);
            } else {
                return callback({
                    "Statuscode": res.statusCode,
                    "StatusMessage": res.statusMessage
                }, null);
            }
        });
        res.on('end', function(){
          console.log("Res end###################");
        })
    });

    req.write(JSON.stringify(filter));
    req.end();

    req.on('error', (e) => {
        return callback(e, null);
    });
}


Проблема в том, что "ответ" приходит не полным, я так думаю, что соеденение "req.end();" закрывается быстрее, чем приходят все данные. Если к примеру данных мало, то всё работает нормально.
Можно как-то дождаться пока всё придёт и потом только вызвать "req.end();"?

Я попытался сделать,
res.on('end', function(){
          req.end();
        })

но "req.end();" одновременно и стартует это всё. Кто может подсказать как надо правильно сделать?
  • Вопрос задан
  • 418 просмотров
Подписаться 1 Оценить Комментировать
Ответ пользователя Severus256 К ответам на вопрос (3)
severus256
@severus256
Code everywhere....
Вам нужно как-то насимулировать взаимодействие с сервером, пока не придут все данные. Можно попробовать http-статусами. Например, пока данные в обработке, сервер посылает статус 100 с определенными интервалами. Когда данные пришли и процесс завершен, то получаете статус 101 и закрываете соединение.
Ответ написан