我可能有點新瞭解承諾esp藍鳥的基本功能。我試圖完成的是一個處理批量寫入250K +行到數據庫的API服務器。大約需要30秒才能完成請求。我希望API服務器根據批量寫入的成功返回正常或錯誤。當我不使用承諾時,我沒有機會冒出錯誤,因爲請求沒有等待批量寫入完成。但是,如果我使用承諾錯誤和成功正常工作。但是,直到操作完成後,服務器纔會響應。簡而言之,使用promise庫來處理批量寫入會阻塞API服務器。藍鳥承諾阻止自然
function chunk(arr, chunkSize) {
var R = [];
for (var i=0,len=arr.length; i<len; i+=chunkSize)
{
R.push(arr.slice(i,i+chunkSize));
}
return promise.resolve(R);
}
exports.add = function(req, res) {
var PO_STD_LT_TIME = 90; //DAYS
Parts.sync()
.then(function() {
return Parts.destroy({
where: {}
});
})
.then(function() {
var workbook = XLSX.readFileSync(__dirname + '/dbo_tblCPLParts_.xlsx');
var sheet_name_list = workbook.SheetNames;
var JSON_S = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);
var size = 40000;
chunk(JSON_S, size).then(function(JSON_Small) {
promise.each(JSON_Small, function (JSON_small_){
Parts.bulkCreate(JSON_small_)
.catch(function(err) {
res.json(500, {
Error: "Error : " + err
});
})
}).finally(ext_fns.handleResult(res,200))
})
})
}
處理這個問題的最好方法是什麼?我是否以正確的方式使用承諾?
所有js都阻塞(setTimeout/interval除外)。只有主持人可以提供休息的機會 – dandavis
假設任務總是花費30秒完成,但在promisifying之前,你沒有意識到。 –