Я использую Sails, Ватерлинию и асинхронной библиотекукак сделать работу контура с async.parallel()
function Outerfunction(listOfProducts) {
var salesOrderId = 1; //some id
var prom = [];
for (var i = 0; i < listOfProducts.length; i++) {
var qty = listOfProducts[i].quantity;
var prod = listOfProducts[i].productName;
var update = function(qty, prod, SalesOrderId) {
CardImages.update({
where: {
productName: prod,
isSold: false,
readyToSell: true
}
}, {
order: SalesOrderId,
isSold: true
})
.exec(function(err, updatedRecords) {
if (err) return err;
return updatedRecords;
});
}
prom.push(update);
}
async.parallel(prom, function(err, result) {
//this callback never gets called
console.log("database calls done");
});
}
Я пытаюсь обновить базу данных для цикла, этот код работает отлично и обновление база данных, но мой обратный вызов с async.parallel
не будет вызван, когда все записи будут обновлены.
'async.parallel' принимает массив * функций *. Что возвращает 'exec'? Учитывая, что вы отметили это с помощью [обещания], кажется, вы ожидаете, что оно вернет обещание (afaik, только если вы не передадите обратный вызов 'exec') - поэтому вы хотите использовать' Promise.all (prom). Then (...) ', и не следует использовать async.js вообще! – Bergi
или stick with 'async', очистить любое понятие обещаний, изменить имя участника« proms »на« tasks »и изменить функции, надавленные на' задачи', чтобы соответствовать [документации] (https: // github.com/caolan/async#parallel) –
вместо использования цикла for я использовал функцию, счетчик и обратный вызов, но медленный, и я все еще ищу решение :) –