我一直在尝试从当前用户(gamesArray
)更新字段(Parse.User.current()
),所以稍后在另一个视图中我可以看到它。问题在于,当我这样做时,字段会在保存对象后立即更新(I console.log()
并在Parse的数据库UI上检查它)但是当我转到另一个视图时,用户在其中检索并在屏幕上显示该字段,它不会更新。
我的_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
我可以获取更新字段的唯一方法是注销并使用同一用户登录。
为什么?我究竟做错了什么?我怎么能“更新”用户,所以我不必退出?
答案 0 :(得分:1)
听起来您正在阅读的用户对象与您正在更新的特定对象不同。因此,您正在更新数据库中的对象,但您正在读取的用户对象不知道数据库中的对象已更新。您应该先尝试抓取用户。 iOS有一个fetchIfNeeded方法。