Parse.com CloudCode在response.success()处理后执行代码?

时间:2014-07-16 04:49:02

标签: javascript loops asynchronous parse-platform promise

如果我有这样的代码

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

1 个答案:

答案 0 :(得分:3)

循环确实执行了两次。 response.success()就像一个返回。

异步魔法在" save"方法。当"保存"被称为,Parse.com说,"好吧,你要我保存它。我会保存它,但不是现在。现在,我承诺以后会保存它。" save方法返回一个Promise对象,当实际保存对象时,将实现promise。

所以会发生什么有点像

  1. 第一次循环:创建朋友#1。
  2. 请求Parse保存朋友#1。
  3. 第二次循环:创建朋友#2。
  4. 请求Parse保存朋友#2。
  5. 回复成功回复。
  6. Parse实际上节省了朋友#1和朋友#2
  7. 自从我使用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对象。