parse.com Cloud Code:一些未保存的对象列表

时间:2015-01-17 20:15:48

标签: parse-platform cloud-code

在过去几天内解析的新内容,并且想知道是否有人可能知道我的问题是什么。我正在尝试创建一个后台作业,从外部服务器检索字符串列表,然后遍历该列表,保存包含具有can函数的字符串的对象。服务器返回20个项目的列表,但只保存9个对象。甚至更奇怪,似乎甚至没有为i

调用保存对象的函数

这是我的代码:

var MyObject = Parse.Object.extend("MyObject");

Parse.Cloud.job("getNew", function (request, status) {
    // Set up to modify user data
    Parse.Cloud.useMasterKey();

var newObjects;
Parse.Cloud.httpRequest({
    url: 'myURL',
    success: function (httpResponse) {
        newObjects = httpResponse.data;
        var arrayLength = newObject.length;
        console.log('got ' + newObjects.length + ' new Objects');
        for (var i = 0; i < arrayLength; i++) {   
            console.log('saving Object ' + newTopics[i]);
            Parse.Cloud.run('saveObject', {
                name: newObjects[i]
            }, {
                success: function (message) {
                    console.log(message);
                },
                error: function (error) {
                    console.log(error);
                }
            });


        }
        status.success("New Objects Added.");
    },


  error: function (httpResponse) {
        console.error('Request failed with response code ' + httpResponse.status);
        status.error('Request failed with response code ' + httpResponse.status);
    }


 });


});


Parse.Cloud.define("saveObject", function (request, response) {
    var query = new Parse.Query("Review");
    var name = request.params.name;
var object = new MyObject();
object.set("name", name);
object.set("nameLowerCase", name.toLowerCase());
console.log('saving the object ' + object.get("name"));
object.save(null).then(
    function (object) {
        response.success('New object created with objectId: ' + object.get("name"));
    },
    function (error) {
        console.log('Failed to create new object, with error code: ' + error.message);
    });
});

我的作业日志输出显示甚至没有为未保存的项调用saveObject函数,即使在调用这些项的保存对象调用之前的行上的控制台日志语句也会被记录。

感谢任何阅读此内容的人,我真的很感激帮助。

1 个答案:

答案 0 :(得分:0)

在您将代码更改为使用saveAll()之前代码失败的原因是您在for循环内启动了一堆异步调用,并且在您完成最后一个循环后,您就开始了打电话给status.success(),终止你的代码...你没等等异步任务完成。

一种方法是创建一个数组,将所有run()调用(返回promises)放在那里,然后在success()的then块内调用Parse.Promise.when(promises).then(...)

var promises = [];
for (var i = 0; i < arrayLength; i++) {   
    console.log('saving Object ' + newTopics[i]);
    promises.push(Parse.Cloud.run('saveObject', {
        name: newObjects[i]
    }, {
        success: function (message) {
            console.log(message);
        },
        error: function (error) {
            console.log(error);
        }
    }));
}

Parse.Promises.when(promises).then(function() {
    status.success("New Objects Added.");
});

承诺是你的朋友,学习他们,爱他们,他们会让你的生活更轻松!