如何在promise解析时手动将promise的结果获取到作用域变量中
How do I get the results of a promise into a scoped variable manually upon promise resolution?
假设我正在构建一个股票行情应用程序,并且我需要每2秒更新一次价格,我有一个$resource封装在对WebApi的调用中,并且我的控制器上有$scoped变量,用于维护这些$resource调用的结果。
我正在为$interval修改Angular文档中的示例。主要区别在于,在我的间隔内,我将$scoped变量更新为$resource的结果。
我一直在使用Angular的自动promise解析来绑定我的变量,但现在我已经在间隔上更新了我的符号,每次间隔启动时数据都会擦除,直到promise解析后才会显示,所以我在View上得到了"挡风玻璃雨刷效果"。我真正想要的是显示"旧数据",直到promise返回,此时,结果将被填充到我的作用域变量和视图反弹中。
使用以下代码,最简单的方法是什么?
我尝试引入一个中间变量,将其分配给$resource.Bars()中的promise,并在间隔内注册一个成功回调,但成功回调从未启动。
'use strict';
var ctrls = angular.module('MyModule',[]);
ctrls.controller('FooCtrl', ['$scope', '$location','$interval','$document','service',
function( $scope,$location,$interval,$document,service)
{
var stop;
$scope.Bars = {};
$scope.Baz = service.Baz; //Note that angular resolves this promise automatically.
$scope.pollService = function(){
if(angular.isDefined(stop))return;
stop = $interval(function(){
if(service){
$scope.Bars = service.Bars();
}
},1000);
};
$scope.stopPolling = function(){
if(angular.isDefined(stop)){
$interval.cancel(stop);
stop = undefined;
}
};
$scope.$on('$destroy',function(){
$scope.stopPolling();
});
$document.ready(function(){
$scope.pollService();
});
}
var app = angular.module('MyModule.Services',['ngResource']);
app.service('service', ['$resource', function($resource)
{
var proxy = $resource(
'http://server/subsystem/api/Foo/:component',
{},
{
Bars: {method:'GET',isArray:false,url: 'http://server/subsystem/api/Foo/Bars'
,Baz: {method:'GET',isArray:false,rul: 'http://server/subsystem/api/Foo/Baz'
}
return proxy;
}]);
编辑
在我发布问题后不久,一位同事就为我提供了帮助。我试图通过.then()在promise上注册一个成功回调,但这显然是不正确的。成功回调可以直接放在service.Bars()
调用中作为第一个参数。所以,在这种情况下,我的代码变成了
$scope.pollService = function(){
if(angular.isDefined(stop))return;
stop = $interval(function(){
if(service){
service.Bars(function(data){
if(data) $scope.Bars = data;
});
}
},1000);
};
我建议替换:
$scope.Bars = service.Bars;
类似于:
service.Bars.get().$promise.then(
function (data) {
$scope.Bars = data;
}
);
若要仅在资源中有数据时设置作用域变量。。
service.Bars(function(data){
if(data)$scope.Bars = data;
});
是我要找的机器人
相关文章:
- 以同步方式获取Javascript Promise的值
- 从angular$http获取promise数据
- 在 promise 中获取构造函数变量
- 如何获取 XMLHttpRequest Promise 进度
- 如何测试从promise对象获取数据的控制器
- 获取Promise之外的变量值
- 如何使用promise获取Google Places数据
- 在多维数组中获取promise的结果
- 从 MeanJS 中的 AngularJS Promise 获取值
- 从 Angular Promise 获取数据
- 如何使用 Parse.promise javascript 定义一个承诺数组并获取结果数组 [parse.com]
- 如何递归迭代要使用 Promise 获取的文件树结构
- ES7使用wait生成器从一系列promise中获取结果
- 使用q promise和map来获取文件内容
- 在angular js promise中未获取状态错误代码
- 如何在promise解析时手动将promise的结果获取到作用域变量中
- 从promise的promise中获取数据以及其他数据(promise.all)
- 从angular的promise函数中获取数据
- 如何获取通过过滤器的前N个promise
- 将列表传递给Parse.Promise.when,但只获取Promise链中的第一个元素