问题
我一直在尝试从当前用户(Parse.User.current()
(更新一个字段(gamesArray
(,所以稍后我可以在另一个视图中看到它。问题是,当我这样做时,字段会被更新(我在对象保存后立即更新console.log()
,并从Parse在数据库UI上检查它(,但当我转到另一个查看时,在其中检索用户并在屏幕上显示字段,它不会更新。
上下文
我的_User
有一个名为gamesArray
的Games
数组,所以我更新该数组如下:
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方法。