Javascript 为什么$watch函数返回未定义?

Javascript 为什么$watch函数返回未定义?,javascript,angularjs,angularjs-service,watch,angularjs-watch,Javascript,Angularjs,Angularjs Service,Watch,Angularjs Watch,下面是我的手表功能。。。它目前正在我的ViewFactory中观看一个函数 // Watch for when tagsFilterModal is showing: vs.$watch('ViewFactory.retrieveSavedViews()', function(newVal) { console.log("New Data", newVal); }); 函数调用API并返回数据: function retrieveSavedViews() { console.l

下面是我的手表功能。。。它目前正在我的ViewFactory中观看一个函数

// Watch for when tagsFilterModal is showing:
vs.$watch('ViewFactory.retrieveSavedViews()', function(newVal) {
    console.log("New Data", newVal);
});
函数调用API并返回数据:

function retrieveSavedViews() {
    console.log('retrieveSavedViews called...');
    ApiFactory.getViews().then(function(data) {
        if (data.data.status === 'Success') {
            // Store views locally:
            return storeSavedViews(data.data.views);
            // Populate load view dropdown:

        }
    });
}
^您可以在上面看到,我返回了另一个函数
storeSavedViews()


我怎么会在这里错误地使用了
$watch
服务?

我建议您-几乎从不在函数上使用$watch。因为这样函数将在每个摘要周期中启动

这里有一个简单的
$scope.$watch('test()')
,您可以看到,如果我更改了另一个scope变量,而您无法控制它,
test()
将启动

您应该做的是存储对对象的承诺:
$scope.object=Service.get()
并观察它。 通常,您可以将watcher创建留给angular,只需在html中使用:

<div ng-if="!object.$resolved">Retrieving data...
</div>
<div ng-if="object.$resolved">Got data {{object}}
</div>
正在检索数据。。。 已获取数据{{object}
如果您需要在异步调用完成后执行某些特定操作,那么最好提供回调函数。

RetrieveSavedView
不返回值。啊,好吧,是的,我忘记了
返回ApiFactory.getViews()
现在实际上我不需要
$watch
我可以等待承诺返回!隐马尔可夫模型。。。我会在这里继续一点,然后我想发布我的想法。请随便用一个让
$watch
工作的例子来回答。这就是答案,永远不要使用
$watch
中的函数,我解决了上面的问题,只是等待承诺返回,然后做一些事情。
<div ng-if="!object.$resolved">Retrieving data...
</div>
<div ng-if="object.$resolved">Got data {{object}}
</div>