在解析object.save();不回报任何原因?

时间:2015-04-07 21:29:10

标签: javascript parse-platform promise

这是我的代码,它遍历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;

2 个答案:

答案 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。