Javascript-为query parse.com匹配项

Javascript-为query parse.com匹配项,javascript,pointers,parse-platform,cloud,promise,Javascript,Pointers,Parse Platform,Cloud,Promise,我在parse中有这两个类 这是我的TestItem类,它有可用的项。然后我有了我的UserFavorites类: 它包含用户喜欢的项目。正如你所看到的,水牛华夫饼薯条和虾宝男孩都在这两个班。在UserFavs中,我有一个从UserFav中的项目到TestItem中的项目的指针,因此我可以将它们匹配到与此问题无关的目的。我的问题是,类TestItem中的项目会被删除,并且每天都会添加新的项目。因此testItem中的指针不再有效。所以我再也比不上他们了。正如您所看到的,我手动更新了shrim

我在parse中有这两个类

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

它包含用户喜欢的项目。正如你所看到的,水牛华夫饼薯条和虾宝男孩都在这两个班。在UserFavs中,我有一个从UserFav中的项目到TestItem中的项目的指针,因此我可以将它们匹配到与此问题无关的目的。我的问题是,类TestItem中的项目会被删除,并且每天都会添加新的项目。因此testItem中的指针不再有效。所以我再也比不上他们了。正如您所看到的,我手动更新了shrimppoboy的指针,只是为了显示这一点。我需要一些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?  
            }
        });
    }
});
});
Parse.Cloud.define(“updateUserFavPointerToTestItem”),函数(请求、响应){
var TestItem=Parse.Object.extend(“TestItem”);
var UserFav=Parse.Object.extend(“userfavorite”);
var testItemsQuery=newparse.Query(TestItem);
var userFavoritesQuery=newparse.Query(UserFav);
testItemsQuery.find().then(函数(testItemRes){
对于(变量i=0;i
非常感谢您提前提供的帮助

有几件事:

  • 您必须为每个迭代创建新的查询实例。由于这一切都是异步发生的,尝试重用相同的查询对象并重置“项”肯定会导致问题
  • 查询对象本身不是“然后才可以”的。也许你忘了在里面写“find()”
  • 使用正确的对象更新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);
    });
});

这应该能奏效

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);
});
}))


我只是调整了我使用的东西。

基本上,尽可能简单。我的TestItems类被删除并更新,这使得UserFavorites类中指向TestItem类的指针错误。所以我想让我的脚本找到TestItems类中与UserFavorites类中的项匹配的所有项,即匹配项。然后更新UserFavorites类中这些项的指针,以指向TestItem类中的正确项。这更有意义吗?如果指针无效,您打算如何查找匹配项?是否要匹配项目字符串字段?啊。我想我现在明白了。我已经用一个我认为应该适合您的解决方案更新了答案。这不起作用,因为查询是异步的。代码一直在运行,数组没有填充。jot保持空白,因为查询返回信息的速度不够快。所以我想它需要一些承诺,抱歉,我现在正在更新它。