#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
оно навсегда застрянет в ожидании.