我是Parse和Cloud Code的新手。我正在尝试通过云代码功能初始化新用户的数据。该函数查询我的“初始项目对象”(总共223个项目),然后遍历每个项目,为用户创建一个新的“项目”。在循环内部,新项目的字段被设置并通过调用save()结束。但是,该功能似乎有效,而不是保存223个新项目,只创建了9个。我在保存后放置了一个日志语句,看看实际上循环是否正在迭代223个项目......而且确实如此。下面是我的云代码和日志。
为什么只有9件物品被保存?保存的9个项目看起来很好。
Parse.Cloud.define("initializeNewUser", function(request, response) {
var InitialItemsObject = Parse.Object.extend("InitialParseItems");
var itemsQuery = new Parse.Query(InitialItemsObject);
itemsQuery.limit(500);
itemsQuery.find().then(function(results) {
console.log('Found ' + results.length +' Items.');
var user = request.user;
var ACL = new Parse.ACL(user);
for (var i = 0; i < results.length; i++) {
var defaultItem = results[i];
var item = new Parse.Object("Items");
item.set('itemID', defaultItem.get('itemID'));
item.set('author', user);
item.set('groupID', defaultItem.get('groupID'));
item.set('itemName', defaultItem.get('itemName'));
item.set('itemNote', defaultItem.get('itemNote'));
item.set('itemChecked', defaultItem.get('itemChecked'));
item.set('itemIsFavorite', defaultItem.get('itemIsFavorite'));
item.set('itemSelected', defaultItem.get('itemSelected'));
item.set('itemStruckOut', defaultItem.get('itemStruckOut'));
item.set('manualSortOrder', defaultItem.get('manualSortOrder'));
item.set('productID', defaultItem.get('productID'));
item.set('itemTimestamp', defaultItem.get('itemTimestamp'));
item.setACL(ACL);
item.save();
//console.log(defaultItem.get('itemName') + ' saved.');
}
// success has been moved inside the callback for query.find()
console.log('Successfully initialize ' + results.length + ' Items.');
response.success(results.length);
},
function(error) {
// Make sure to catch any errors, otherwise you may see a "success/error not called" error in Cloud Code.
console.log('Failed to initialize Items. Error code: ' + error.code + ' ' + error.message);
response.error("Failed to initialize Items. Error code: " + error.code + ": " + error.message);
});
});
I2015-07-17T15:16:38.661Z] v22用户va0TTGwOk7的云计算功能initializeNewUser: 输入:{} 结果:223 I2015-07-17T15:16:38.930Z]共找到223条物品。 I2015-07-17T15:16:39.141Z]成功初始化223项。
答案 0 :(得分:0)
好的我有一些评论。
1。)在第7行,您使用request.user设置用户。我不确定你是如何发送数据的,但我总是使用request.params。[insert item name]
2。)下一个重要的事情是通过使用“then()”你正在使用promises。在每个“那么”结束时,你应该回复一个承诺。这意味着你不会说“item.save()”而是“return item.save()”。储蓄也是一种承诺,所以你需要退货。这应该是你的一般承诺模式。
SomePromise.then( function(a)
{return promiseA} ).then( function(b)
{return PromiseB} ).then( function(c)
{response.success}, function(error){response.error})
3。)当您保存大量项目时,您必须使用“saveAll()”或制作一系列承诺,然后立即保存所有项目。一个好的经验法则是每次在数组中保存大量内容时使用promise数组。以下是Cloud Code开发人员指南的一部分,它将向您显示正确的格式https://parse.com/docs/js/guide#promises-promises-in-parallel