Возможно, я немного новичок, чтобы понять основное функционирование обещаний esp bluebird. То, что я пытаюсь выполнить, - это сервер API, который обрабатывает массовую запись строк 250K + в базу данных. Чтобы выполнить запрос, требуется около 30 секунд. Я хочу, чтобы сервер API вернул ok или ошибку, основываясь на успехе массовой записи. Когда я не использую обещания, я не получаю возможность выпустить ошибку, потому что запрос не ждет завершения массовой записи. Однако, если я использую обещание, ошибка и успех будут работать правильно. Но сервер перестает отвечать, пока действие не будет завершено. В двух словах, используя библиотеку обещаний для обработки массовой записи, блокирует сервер API.Являются ли bluebird обещаниями, блокирующими в природе
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 блокировка (за исключением комплектTimeout/промежуток). только хозяин может предоставить возможность сделать перерыв. – dandavis
Предположительно, задача всегда занимала 30 секунд, но перед обещанием вы не знали. –