parse.com Cloud Code:对象列表中的一些未保存
parse.com Cloud Code: some in list of objects not saved
最近几天刚开始解析,想知道是否有人知道我的问题是什么。我正在尝试创建一个后台作业,该作业从外部服务器检索字符串列表,然后遍历该列表,保存包含具有 could 函数的字符串的对象。服务器 returns 一个包含 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 函数,即使在调用这些项目的保存对象调用之前的控制台日志语句确实被记录了.
感谢阅读本文的任何人,我将非常感谢您的帮助。
您的代码在更改为使用 saveAll()
之前失败的原因是您在 for
循环中启动了一堆异步调用,一旦您完成了最后一个调用,您然后继续调用 status.success()
终止你的代码......你没有等待异步任务完成。
一种方法是创建一个数组,将所有 run()
调用(return 承诺)放在其中,然后在 [=16 的 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.");
});
承诺是你的朋友,学习它们,热爱它们,它们会让你的生活更轻松!
最近几天刚开始解析,想知道是否有人知道我的问题是什么。我正在尝试创建一个后台作业,该作业从外部服务器检索字符串列表,然后遍历该列表,保存包含具有 could 函数的字符串的对象。服务器 returns 一个包含 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 函数,即使在调用这些项目的保存对象调用之前的控制台日志语句确实被记录了.
感谢阅读本文的任何人,我将非常感谢您的帮助。
您的代码在更改为使用 saveAll()
之前失败的原因是您在 for
循环中启动了一堆异步调用,一旦您完成了最后一个调用,您然后继续调用 status.success()
终止你的代码......你没有等待异步任务完成。
一种方法是创建一个数组,将所有 run()
调用(return 承诺)放在其中,然后在 [=16 的 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.");
});
承诺是你的朋友,学习它们,热爱它们,它们会让你的生活更轻松!