在更新对象(_User)并稍后检索它之后,字段不会更新(Parse)



问题

我一直在尝试从当前用户(Parse.User.current()(更新一个字段(gamesArray(,所以稍后我可以在另一个视图中看到它。问题是,当我这样做时,字段会被更新(我在对象保存后立即更新console.log(),并从Parse在数据库UI上检查它(,但当我转到另一个查看时,在其中检索用户并在屏幕上显示字段,它不会更新。

上下文

我的_User有一个名为gamesArrayGames数组,所以我更新该数组如下:

addGameToUser = function(game, userId) {
    var userQuery = new Parse.Query(Parse.User);
    userQuery.equalTo("objectId", userId);
    userQuery.first({
        success: function(user) {
            // User found
        },
        error: function(error) {
            console.log(error.message);
        }
    }).then(function(user) {
        // If user is current user update it
        if(user.id == Parse.User.current().id) {
            var games = user.get('gamesArray');
            games.push(game);
            user.set('gamesArray', games);
            user.save(null, {
                success: function(user) {
                    console.log(user.get('gamesArray'));
                },
                error: function(user, error) {
                    console.log(error);
                }
            });
        }
        else {
            // Call cloud function...
        }
    });
}

在这种情况下,console.log(user.get('gamesArray'))返回更新后的字段。当用户创建新游戏时,我会使用此功能。

问题是,在不同的视图中,当我检索用户并获得该字段时,它不会更新:

getUserGames: function() {
    var games = Parse.User.current().get('gamesArray');
    console.log(games);
}

这里,console.log(games)正在打印旧字段值。因此,如果我在数组中有4个游戏,上一个函数会打印5(4加上创建的一个(,而现在仍然打印4。

我想可能我没有正确保存Game,但这是当前User:的Parse数据库UI gamesArray列的输出

[{"__type":"Pointer","className":"Game","objectId":"..."}]

我获取更新字段的唯一方法是注销并使用同一用户登录

问题

为什么?我做错了什么?我如何">更新"用户,这样我就不必注销?

听起来您正在读取的用户对象与您正在更新的特定对象不同。因此,您正在更新数据库中的对象,但从中读取的用户对象不知道数据库中的该对象已经更新。您应该先尝试获取用户。iOS有一个fetchIfNeeded方法。

相关内容

  • 没有找到相关文章

最新更新