내가 외부 API에 대한 요청 후 내 데이터베이스에서 개체가 존재하고 부정적인 경우 그것을 저장 약속 함수를 구현하려 했어요. Q.all에서 전달 된 배열과 함께이 함수를 사용하고 모든 개체가 같은 시간에 저장된다는 것을 알기 때문에 매번 검사가 실패하고 중복 개체가 있습니다. Q.all에서 전달 된 약속을 순차적으로 실행하고 병렬로 실행하지 않는 방법은 무엇입니까? 이것은 코드입니다. finalCuts는 고객과의 참조가있는 객체의 배열입니다. [12, C2 14, C3 : C1 (14), 상기 finalCuts 배열 I는 예를 들어 필드 코드 일부 개체가 있다면순차적으로 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;
그래서, 내 데이터베이스에서이 함수의 실행 후을 나는 것 두 고객이 코드 14를 사용합니다.
체크 아웃 http://stackoverflow.com/questions/24586110/resolve-promises-one-after-another-ie-in-sequence –