【发布时间】:2016-06-07 20:59:44
【问题描述】:
我尝试实现一个 promise 函数,在向外部 api 发出请求后,它会检查我的数据库中是否存在对象,在否定的情况下,它会保存它。我将此函数与传入 Q.all 的数组一起使用,我看到所有对象都同时保存,因此每次检查都失败并且我有重复的对象。如何按顺序而不是并行运行 Q.all 中传递的承诺? 代码如下:finalCuts 是一个对象数组,与客户有关联。
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, c2: 14, c3: 14],那么在我的数据库中执行此函数后,我将有两个客户的代码14.
【问题讨论】:
标签: javascript node.js