我有一个范围变量,它是在几次请求和一些逻辑执行之后设置的,如下所示
$scope.record = {};
$scope.record.field = "custom_value";
现在我有一个不同的函数,它独立于这次执行而执行。
function test(){ if($scope.record.field == 'some_value') {//做某事 }}
问题在于,只有在 $scope.record.field 具有值后才应检查 if
条件。
我尝试将其放入 $q 中,如下所示 $q.all($scope.record.field).then(func)
但它不起作用。
我也尝试使用when $q.when($scope.record.field).then(func)
但它仍然不起作用。
两次我都得到了未定义的值。
我不想在设置 $scope.record.field 的部分放置任何代码,这表示分配完成,因为我想让这两个部分保持分离和独立。而且它们都可以访问相同的范围。
如何确保代码的某些部分仅在 $scope.record.field
具有值后执行?
最佳答案
可能实现的片段
//one of the ways you could do that
'use strict';
(function() {
function MyService($q, Util) {
var trackThis;
var deferred;
var methods = {
setValue(val){
trackThis = val;
if (deferred) deferred.resolve(val);
},
listenForValue(val){
deferred = $q.defer();
return deferred.promise;
}
}
return methods;
}
angular.module('myApp')
.factory('MyService', MyService);
})();
编辑 假设你有一个 Controller 如下:
'use strict';
(function() {
class MyController {
constructor(MyService, AnotherService) {
MyService.listenForValue().then(function(value){
//do whatever you want with the value
});
// Now introduce have another guy setting the value
AnotherService.fetchValue(function(value){
MyService.setValue(value); //this guys will resolve the previous promise
});
}
}
angular.module('myApp')
.controller('MyController', MyController);
})();
注意:添加验证以防止可能出现的问题
备注:基本上,您创建一个服务,允许您在不同的事件 Controller 之间共享状态,MyService 允许您创建一个 promise ,可以通过设置值随时解决该 promise 。请注意,每个 Promise 只能调用一次解析
关于javascript - 我可以创建一个 promise 来检查变量是否以 Angular 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402482/