Angular JS:异步工厂调用问题
Angular JS: Async factory call issue
我是 angular 的新手,我正在创建一个简单的应用程序。它在项目之间导航,通过 JSON:
引入
http://plnkr.co/edit/FTfa1rcVaf85xTu65oSR?p=preview
我也在使用一个工厂,我在其中调用 get
或 getOne
,以便它在一个地方处理 $http
,仅在以下情况下调用它尚未获取数据。
当您在主页上启动时一切正常,但是当您在单个项目页面上启动时,get
和 getOne
同时被调用,提取重复数据.您可以通过在它自己的 window 中打开 Plunker 并转到 url 来测试它,例如 /#/projects/1
.
我知道为什么会这样,只是不知道如何阻止它。
是否有一个简单的解决方法,或者我是否以完全错误的方式解决了这个问题?
感谢观看。
通过 $q
而非原始数据实现您的功能 return 承诺。然后你就可以用 .then()
链接它们来实现你需要的等待:
get: function() {
// Create a deferred object
var deferred = $q.defer();
// Do stuff in here
// ...
// and depending on the results,
// call deferred.resolve(data) or deferred.reject(error)
// Return the promise object
return deferred.promise;
}
那么,在调用该函数的代码中,您可以:
MyFactory.get().then(function (data) {
$scope.var = data;
}
这种模式在 Angular 中很常见,而且效果很好。
已更新 plunkr: here。我改变了你模拟服务器请求延迟的方式,这样我就可以在 $http
.
的 .success()
回调中轻松解析我的 deferred
对象
我是 angular 的新手,我正在创建一个简单的应用程序。它在项目之间导航,通过 JSON:
引入http://plnkr.co/edit/FTfa1rcVaf85xTu65oSR?p=preview
我也在使用一个工厂,我在其中调用 get
或 getOne
,以便它在一个地方处理 $http
,仅在以下情况下调用它尚未获取数据。
当您在主页上启动时一切正常,但是当您在单个项目页面上启动时,get
和 getOne
同时被调用,提取重复数据.您可以通过在它自己的 window 中打开 Plunker 并转到 url 来测试它,例如 /#/projects/1
.
我知道为什么会这样,只是不知道如何阻止它。
是否有一个简单的解决方法,或者我是否以完全错误的方式解决了这个问题?
感谢观看。
通过 $q
而非原始数据实现您的功能 return 承诺。然后你就可以用 .then()
链接它们来实现你需要的等待:
get: function() {
// Create a deferred object
var deferred = $q.defer();
// Do stuff in here
// ...
// and depending on the results,
// call deferred.resolve(data) or deferred.reject(error)
// Return the promise object
return deferred.promise;
}
那么,在调用该函数的代码中,您可以:
MyFactory.get().then(function (data) {
$scope.var = data;
}
这种模式在 Angular 中很常见,而且效果很好。
已更新 plunkr: here。我改变了你模拟服务器请求延迟的方式,这样我就可以在 $http
.
.success()
回调中轻松解析我的 deferred
对象