我正在使用Parse和服务器端Javascript。我想在列值中保存总数,如下所示。此代码保存新的列值,但它没有放入任何值。 Total有多个真值和假值(如0和NaN),因为每个Id都有一个总数。
for (i = 0; i < Ids.length; i++){
Id = Ids[i];
var Total = Math.round(_.reduce(_.map(value[i], function (n) {
return n.Partial
}), function (memo, num) {
return memo + num;
}, 0) * 100) / 100;
Query.get(Id, {
success: function (item) {
item.set("duty", Total);
Q.all(item.save());
}
})
}
答案 0 :(得分:1)
尝试重构一点,(没有完全理解代码的含义)。当划分为逻辑部分时,它变得更加清晰。异步发生的事情总是分为承诺返回函数。
它以savePromises
的数组结束,可以与saveAll
一起运行。
var savePromises = [];
_.each(Ids, function(objectId, index) {
savePromises.push(setDuty(objectId, index));
});
Parse.Object.saveAll(savePromises);
// get an object with its id. use its index to compute a duty
// return a promise to save the object
function setDuty(objectId, index) {
return getObjectWithId(objectId).then(function(object) {
object.set("duty", dutyValueForIndex(index));
return object.save();
});
}
// return a promise to get an object with its id
function getObjectWithId(objectId) {
var query = new Parse.Query("Table_Name_Goes_Here");
return query.get(objectId);
}
// compute duty for a given index
function dutyValueForIndex(index) {
var array = _.map(value[i], function(n) {
return n.Partial
});
var sum = _.reduce(array, function(memo, num) { return memo+num; }, 0);
return sum * 100 / 100;
}