如果我有这样的代码
if (request.params.friends != null)
{
_.each(request.params.friends, function(friend) {
// create news
var News = Parse.Object.extend("News");
var news = new News();
news.set("type", "ask");
news.save();
});
response.success();
}
且request.params.friends
的长度为2,第二条新闻是否会被保存?如果没有,如何确保它得到保存?我查看了Parse.Promise
文档,在所有示例中,循环都在查询或保存中。我是否需要先保存第一条新闻,然后创建Promise
?我仍然不知道"异步"工作.. response.success()
的工作方式是return
还是break
?
答案 0 :(得分:3)
循环确实执行了两次。 response.success()就像一个返回。
异步魔法在" save"方法。当"保存"被称为,Parse.com说,"好吧,你要我保存它。我会保存它,但不是现在。现在,我承诺以后会保存它。" save方法返回一个Promise对象,当实际保存对象时,将实现promise。
所以会发生什么有点像
自从我使用Parse以来已经有一段时间了,但我不确定这两个好友对象通常会得到保存。调用response.success()可能会导致正在进行的工作。这是另一种实现方式:
var objectsToSave = _.collect(request.params.friends, function(friend) {
var news = new News();
news.set({type : "ask"});
return news;
});
Parse.Object.saveAll(objectsToSave, {
success: function(list) {
// All the objects were saved.
response.success();
},
error: function(error) {
// An error occurred while saving one of the objects.
},
});
saveAll函数一次保存所有对象。它通常比一次保存一个对象更快。除了为saveAll提供要保存的对象之外,我们还为它提供了一个具有成功函数和错误函数的对象。 Parse.com承诺只在保存完成后调用函数(或者它遇到错误)。
还有其他一些事情正在发生。 Parse.Object.extend语句属于代码中的不同位置。此外,set函数不会获取字符串列表。它需要一个JavaScript对象。