параллельный запрос nodejs, отправленный с использованием promise, вызвал исключение ввода-вывода

#node.js #promise

#node.js #обещание

Вопрос:

Я использую Promise в NodeJS для отправки параллельных запросов на внешние API, потому что я хочу увеличить скорость выборки. В Mac это хорошо, все запросы можно отправлять параллельно, но в centos7 NodeJS я заметил эту ошибку:

[Ошибка: EIO, ошибка ввода-вывода] errno: 55, код: ‘EIO’, системный вызов: ‘write’

Почему произошло это исключение?

Это код, который я использовал:

 var parallelFetcher = function(url, body, req, cb){
  var promises = [];
  var error = null;
  Object.keys(body).forEach(function(key){
    promises.push(new Promise(function(resolve){
      wrapper.post( url, JSON.parse(body[key]), req, function(err, data){
        if(!err)
          resolve(data);
        else
          error = err;
      })
    }));
  });
  Promise.all(promises).then(function(results){
    var keys = Object.keys(body);
    var resultObj = {};
    for(var i=0; i<keys.length; i  ){
      resultObj[keys[i]] = results[i];
    }
    cb(error, resultObj);
  }); 
}
  

Комментарии:

1. Что это wrapper.post ?

2. Вместо настройки error вы должны вызвать reject . В частности, если вы никогда не выполните обещание, Promise.all оно навсегда застрянет в ожидании.