Я работаю над приложением NodeJS, которое извлекает много информации из разных API.Существует таймаут по умолчанию с q.allSettled?
Во время самой большой выборки, у меня есть некоторые проблемы с моими обещаниями.
Я предполагаю начать слишком много запросов и слишком Fastly ...
var promises = [];
list_consumptions.forEach(function (item)
{
item.consumptions.forEach(function (data)
{
promises.push(getDetails(item.line, data));
});
});
В getDetails()
function getDetails(line, item)
{
var deferred = Q.defer();
var result = [];
ovh.request('GET', '/telephony/*******/service/' + line + '/voiceConsumption/' + item, function (err, fetched_data)
{
if (!err)
{
result = {
'line': line,
'consumption_id': item,
'type': fetched_data.wayType,
'calling': fetched_data.calling,
'called': fetched_data.called,
'plan_type': fetched_data.planType,
'destination_type': fetched_data.destinationType,
'date': fetched_data.creationDatetime,
'duration': fetched_data.duration,
'price': fetched_data.priceWithoutTax
};
// console.log("RESULT: ",result);
deferred.resolve(result);
}
else
{
deferred.reject(err);
console.log(err);
}
});
return deferred.promise;
}
После цикла:
Q.allSettled(promises).done(function(final_result)
{
final_result.forEach(function (promise_fetch){
if (promise_fetch.state != 'fulfilled')
{
console.log("ERREUR Merge");
}
else
{
all_consumptions.push(promise_fetch.value);
}
deferred.resolve(all_consumptions);
});
return deferred.promise;
});
С помощью этого кода, я получил только журнал ошибки: 400
Я бы попытаться замедлить мой цикл с некоторыми SetTimeout, в этом случае , выборка выполнена, но мой q.allSettled подскочил ... Я действительно потерял ...
Любые идеи по улучшению моих обещаний ручками/ручками? Я уверен, что вы уже знаете, но это моя первая неделя JS ... и nodeJS.
Большое спасибо за вашу помощь ...
Спасибо для вашей помощи, результаты будут успешными сейчас :) Но цикл forEach не возвращает обещание, поэтому «.then» после него выполняется до любого нажатия на all_consumption ... – Mech45
@Leclerc это была опечатка, тогда 'метод должен быть установлен правильно после выполнения 'pwhile', например' pwhile(). then() '. Я исправил свой ответ. Кстати, если это было полезно для вас, пожалуйста, повысьте его, нажав на стрелку и пометьте ее как принятую, нажав на кнопку «V» справа под ней. Благодаря! :) – Buzinas