Javascript - 匹配查询parse.com的项目

时间:2014-09-16 17:40:20

标签: javascript pointers parse-platform cloud promise

我在解析中有这两个类

这是我的TestItem类,它有可用的项目。然后我有我的UserFavorites类:

enter image description here

它包含用户已收藏的项目。正如你所看到的,Buffalo Waffle Fries和Shrimp Po Boy都属于这两个类别。在UserFavs中,我有一个从UserFav中的项目到TestItem中的项目的指针,因此我可以将它们与此问题无关的目的进行匹配。我的问题是,TestItem类中的项目被删除,每天都会添加新的项目。所以testItem中的指针不再有效。所以我再也无法与之匹敌了。正如你所看到的,我手动更新了Shrimp Po Boy的指针,只是为了表明这一点。我的javascript代码需要一些帮助,它会将TestItem中的项与UserFav中的项匹配。然后更新UserFav中的指针以匹配TestItem类中的objectId。如果不要求我澄清,我希望这是有道理的。也有可能不止一个用户喜欢同一个项目,所以我需要它来更新指向TestItem类的两个指针。

到目前为止,我正在使用的是什么:

Parse.Cloud.define("updateUserFavPointerToTestItem", function(request, response) {

var TestItem = Parse.Object.extend("TestItem");
var UserFav = Parse.Object.extend("UserFavourite");
var testItemsQuery = new Parse.Query(TestItem);
var userFavoritesQuery = new Parse.Query(UserFav);

testItemsQuery.find().then(function(testItemRes) {
    for (var i = 0; i < testItemRes.lenght; i++) {
        var item = testItemRes.get('item');
        userFavoritesQuery.equalTo('item', item);
        userFavoritesQuery.then(function(userFavoritesRes) {
            for (var i2 = 0; i2 < userFavoritesRes.length; i2++) {
                //update the testItem pointer here
                //but this doesnt work, I think its because the query is async
                //But I am using .then, so maybe I need some promises?  
            }
        });
    }
});
});

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

有几件事:

  • 您必须为每次迭代创建新的查询实例。由于这一切都发生异步,尝试重用相同的查询对象,重置&#34;项目&#34;,肯定会导致问题。
  • 查询对象本身不是&#34;然后能够&#34;。也许你忘了写&#34; find()&#34;在那里?
  • 使用正确的对象
  • 更新userFavorite的testItem字段
  • 更新项目后,将其推送到数组,以便您可以使用saveAll

代码示例:

Parse.Cloud.define(
    "updateUserFavPointerToTestItem", 
    function(request, response) {

    var TestItem = Parse.Object.extend("TestItem");
    var UserFav = Parse.Object.extend("UserFavourite");
    var testItemsQuery = new Parse.Query(TestItem);

    var userFavoriteObjectsToSave = [];

    testItemsQuery.each(function(testItem) {
        var item = testItem.get('item');
        var userFavoritesQuery = new Parse.Query(UserFav);
        userFavoritesQuery.equalTo('item', item);
        return userFavoritesQuery.each(function(userFavorite) {
            userFavorite.set('testItem', testItemRes);
            userFavoriteObjectsToSave.push(userFavorite);
        });
    }).then(function () {
        Parse.Object.saveAll(userFavoriteObjectsToSave);
    });
});

答案 1 :(得分:1)

这应该可以解决问题

Parse.Cloud.define(
"updateUserFavPointerToTestItem", 
function(request, response) {

var TestItem = Parse.Object.extend("TestItem");
var UserFav = Parse.Object.extend("UserFavourite");
var testItemsQuery = new Parse.Query(TestItem);

var userFavoriteObjectsToSave = [];


}).then(function () {
    Parse.Object.saveAll(Save);
});

});

我只是调整了我使用的内容。