0
我正在從一個NodeJS應用程序中獲取大量來自不同API的信息。q.allSettled有默認的超時時間嗎?
在最大的抓取過程中,我對我的承諾有一些問題。
我想我推出了太多的要求,太快速度......
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。
非常感謝您的幫助...
謝謝爲了你的幫助,現在resquests成功了:)但是forEach的循環沒有返回一個承諾,所以在它之後的「.then」,在任何推動all_consumption之前執行... – Mech45
@Leclerc這是一個錯字,然後是'then '方法應該放在正確的位置在執行'pwhile'之後,例如'pwhile()。then()'。我已經解決了我的答案。順便說一下,如果它對你有用,請點擊箭頭並點擊它旁邊的'V',將它標記爲已接受。謝謝! :) – Buzinas