【问题标题】:parse.com Cloud Code: some in list of objects not savedparse.com 云代码:对象列表中的一些未保存
【发布时间】:2015-01-18 13:25:02
【问题描述】:

最近几天刚开始解析,想知道是否有人知道我的问题是什么。我正在尝试创建一个后台作业,该作业从外部服务器检索字符串列表,然后遍历该列表,使用 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 函数,即使在调用这些项目的保存对象调用之前行上的控制台日志语句确实被记录了。

感谢阅读本文的任何人,我非​​常感谢您的帮助。

【问题讨论】:

  • 我找到了一种使用 Parse.Object.saveAll() 保存所有项目的方法。我仍然不明白我以前的方法不起作用,但也许我应该用这个作为答案。
  • 您应该只使用Parse.Object.saveAll 或每个toSave 对象需要2 个请求(Parse.cloud.runobject.save)来保存以前的方法。

标签: parse-platform parse-cloud-code


【解决方案1】:

在您将代码更改为使用 saveAll() 之前,您的代码失败的原因是您在 for 循环中启动了一堆异步调用,一旦您完成启动最后一个调用,您就继续调用 @ 987654323@ 终止您的代码...您没有等待异步任务完成。

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

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.");
});

Promise 是你的朋友,学习它们,爱它们,它们会让你的生活更轻松!

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 2015-04-14
    • 2014-09-02
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多