Parse platform parse.com云代码:未保存对象列表中的一些

Parse platform parse.com云代码:未保存对象列表中的一些,parse-platform,parse-cloud-code,Parse Platform,Parse Cloud Code,在过去的几天里,我是个新手,我想知道是否有人知道我的问题是什么。我正在尝试创建一个后台作业,该作业从外部服务器检索字符串列表,然后在该列表中循环,使用CAN函数保存包含这些字符串的对象。服务器返回20个项目的列表,但只保存9个对象。更奇怪的是,似乎保存对象的函数甚至没有被调用到i 这是我的密码: var MyObject = Parse.Object.extend("MyObject"); Parse.Cloud.job("getNew", function (request, status)

在过去的几天里,我是个新手,我想知道是否有人知道我的问题是什么。我正在尝试创建一个后台作业,该作业从外部服务器检索字符串列表,然后在该列表中循环,使用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);
    });
});
var MyObject=Parse.Object.extend(“MyObject”);
Parse.Cloud.job(“getNew”,函数(请求,状态){
//设置以修改用户数据
Parse.Cloud.useMasterKey();
var新对象;
Parse.Cloud.httpRequest({
url:'myURL',
成功:函数(httpResponse){
newObjects=httpResponse.data;
var arrayLength=newObject.length;
log('get'+newObjects.length+'newObjects');
对于(var i=0;i
我的作业日志输出显示,甚至没有为未保存的项调用saveObject函数,即使为这些项调用save object调用之前的行上的console log语句没有被记录


感谢所有读到这篇文章的人,我真的非常感谢他们的帮助

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

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

var承诺=[];
对于(var i=0;i

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

我找到了一种使用Parse.Object.saveAll()保存所有项目的方法。我仍然不明白以前的方法不起作用,但也许我应该用这个作为答案。你应该使用
Parse.Object.saveAll
或每个toSave对象需要2个请求(
Parse.cloud.run
Object.save
)来保存以前的方法。
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.");
});