Meteor.users.update结果之前的Meteor模板更新

时间:2014-09-06 01:15:17

标签: meteor

我正试图弄清楚如何在Meteor.users.update()完成之前阻止模板更新。

首先,我试图了解documentation and the use of an optional callback argument,以便理清正在发生的事情。

这就是我所拥有的:

Meteor.users.update(Meteor.userId(),
                    {$set:{'profile.reviewList': []}},
                     [],
                      function(err, result){
                            if (err){
                              console.log('oh no!');
                            } else {
                            console.log('Result achieved: '+this.profile.reviewList);
                            }
                          });

目前,console.log('Result achieved: '+this.profile.reviewList);总是第一次返回类似...TypeError: Cannot read property 'reviewList' of undefined...的内容,但会在结果返回之前告诉我它的触发。

我确定我没有正确实施回调,但我试图模仿这个答案:How do you ensure an update has finished in meteor before running a find?

我真的只想延迟重新渲染相关模板,直到创建属性为止。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您假设回调函数中的范围(this)返回user对象,这是错误的。

如果你想在该回调中获得user对象,只需在那里查询:

var user = Meteor.users.find(Meteor.userId()).fetch()

另一件事,你传递了empty array作为第二个参数,这是不需要的。

Meteor.users.update(
    Meteor.userId(), 
    {
        $set: {
            'profile.reviewList': 'testData'
        }
    },
    function(err, result) {
        if (err) {
            console.log('oh no!');
        } else {
            var user = Meteor.users.find(Meteor.userId()).fetch();
            console.log('Result achieved: ' , user && user.profile && user.profile.reviewList);
        }
    }
);