这是我的代码,它遍历forEach并打印出' 1'但永远不会从object.save()&永远不会打印出2,3或其他任何东西。我尝试了其他一些方法,但似乎都没有。
注意:在任何地方都没有调用response.succes(或error),代码肯定在等待object.save()完成。
var promise = new Parse.Promise();
var query = new Parse.Query("SomeClass");
query.find().then(function(results) {
var promises = [];
results.forEach(function(object) {
object.set("SomeColumnName", true);
console.log('1');
promises.push(object.save(null, {
success: function(result) {
alert('2');
return ;
},
error: function(result, error) {
alert('3');
return ;
}
}));
});
Parse.Promise.when(promises).then(function() {
console.log('inside resolve');
promise.resolve();
}, function() {
console.log('inside reject');
promise.reject();
});
});
return promise;
答案 0 :(得分:1)
您已走上正轨,但您应该利用大多数sdk功能为您创建并返回承诺的事实。有了这些,您可以大大简化代码:
// very handy utility library that provides _.each among many other things
// www.underscorejs.org
var _ = require('underscore');
// answer a promise to modify all instances of SomeClass
function changeSomeClass() {
var query = new Parse.Query("SomeClass");
// if there are more than 100 rows, set query.limit up to 1k
return query.find().then(function(results) { // find returns a promise
_.each(results, function(result) {
result.set("SomeColumnName", true);
});
return Parse.Object.saveAll(results); // and saveAll returns a promise
});
}
将其包裹在云端功能中,并像这样调用成功/错误:
Parse.Cloud.define("changeSomeClass", function(request, response) {
changeSomeClass().then(function(result) {
response.success(result);
}, function(error) {
response.error(error);
});
});
答案 1 :(得分:0)
每个对象一次只能发生一个Parse请求。如果发送了多个请求,则忽略除第一个之外的所有请求。您可能正在尝试执行此操作,而其他线程正在对这些对象进行Parse请求。我知道如果你保存一个对象,它也会保存它的子对象,所以你可能会遇到问题。确保在完成块的后台线程中尽可能多地执行,或尽可能使用saveEventually / fetchEventually。