2014-10-11 107 views
2

我正在使用解析云代码来清除标记被删除时所有指向“标记”对象的指针。 “beforeDelete”被调用并且我没有得到任何错误+控制台打印具有指向已删除的“标签”的指针的正确“歌曲”对​​象解析云代码 - 从指针阵列中删除指针

但是指针并未从阵列中移除

Parse.Cloud.beforeDelete("Tag", function(request, response) { 
    var query = new Parse.Query("Song"); 
    query.equalTo("tags", request.object); 
    query.include(["tags"]); 
    query.find({ 
      success: function(songs) { 
       console.log(songs); 
       for (var i = 0; i < songs.length; i++) { 
        songs[i].remove("tags",request.object); 
        songs[i].save(); 
       }; 
      response.success(); 

      }, 
      error: function(error) { 
       response.error(error); 
      } 
    }); 
}); 

我在做什么错?

感谢 沙尼

回答

6

object.save();是异步的。你在呼唤response.success()之前保存操作完成。你可以使用query.each()

var query = new Parse.Query("Song"); 
query.equalTo("tags", request.object); 
query.include("tags"); 
query.each(function (song) { 
    song.remove("tags",request.object); 
    song.save();  
}).then(function() { 
    response.success(); 
}, function(error) { 
    response.error(error); 
}); 

或者你可以使用parallel promises

var _ = require("underscore"); 

var query = new Parse.Query("Song"); 
query.equalTo("tags", request.object); 
query.include("tags"); 
query.find().then(function(songs) { 
    var promises = []; 
    _.each(songs, function(song) { 
    song.remove("tags",request.object); 
    promises.push(song.save()); 
    }); 
    // Return a new promise that is resolved when all of the saves are finished. 
    return Parse.Promise.when(promises); 

}).then(function() { 
    response.success(); 
}, function(error) { 
    response.error(error); 
}); 
+0

谢谢你,错过了莫名其妙。 BTW“_.each(歌曲,函数(歌曲){”由于某种原因不起作用,但无论如何它现在工作的很好 – shannoga 2014-10-13 16:15:23

+0

啊我忘了提及你需要添加下划线库'var _ = require(“underscore “);' – knshn 2014-10-13 16:17:43