Я попытался реализовать функцию обещания, которая после запроса внешнего api проверяет в моей базе данных, если объект существует и в отрицательном случае он сохраняет его. Я использую эту функцию с массивом, переданным в Q.all, и я вижу, что все объекты сохраняются в одно и то же время, поэтому проверка прерывается каждый раз, и у меня есть повторяющиеся объекты. Как я могу выполнить обещания, переданные в Q.all последовательно, а не параллельно? Это код: finalCuts - это массив объектов, имеющих ссылку на клиентов.Последовательно Q.all обещает nodejs
request.findNewCustomer().then(function(customers) {
Q.all(finalCuts.map(function(currFinalCut) {
return checkAndSetCustomer(currFinalCut._id,currFinalCut.customerCod,customers)
}));
});
checkAndSetCustomer = function(cutId,cod,customers) {
var deferred = Q.defer();
Customer.findByIdentity(cod).then(function(customer) {
if (customer && customer.cod == cod) {
Cut.addCustomerToCut(customer._id,cutId).then(function(result) {
deferred.resolve(result);
});
} else {
customers.forEach(function(currCustomer) {
if (currCustomer.cod == cod) {
Customer.saveNewCustomer(currCustomer).then(function (customer) {
Cut.addCustomerToCut(customer._id, cutId).then(function (cut) {
deferred.resolve(cut);
})
})
}
return deferred.promise;
Таким образом, если в массиве finalCuts У меня есть объект с кодом поля, например [c1: 12, в2: 14, с3: 14], после выполнения этой функции в моей базе данных у меня будет два клиента с кодом 14.
Заканчивать http://stackoverflow.com/questions/24586110/Разрешая-обещания-один-после-другому-то-в-последовательности –