更新对象(_User)并稍后检索它后,字段未更新(解析)

时间:2015-09-29 13:17:27

标签: javascript object parse-platform updates

问题

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

CONTEXT

我的_User有一个名为Games的{​​{1}}数组,所以我更新了这个数组:

gamesArray

在这种情况下,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); } 正在打印旧字段值。因此,如果我在阵列中有4个游戏,则前一个功能打印5(4加上创建的一个),这仍然打印4个。

我想也许我没有正确保存console.log(games),但这是当前用户的Parse数据库UI Game列的输出:

gamesArray

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

问题

为什么?我究竟做错了什么?我怎么能“更新”用户,所以我不必退出?

1 个答案:

答案 0 :(得分:1)

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