我可以创建一个承诺来检查变量是否设置为角度吗?

Can i create a promise which checks if variable is set in angular?

本文关键字:设置 是否 一个承诺 创建 检查 变量 我可以      更新时间:2023-09-26

我有一个范围变量,它是在几个请求和像这样的逻辑执行之后设置的 $scope.record = {};

$scope.record.field = "custom_value";

现在我有一个不同的函数,它独立于此执行执行。

function test(){ if($scope.record.field == 'some_value') { // do something }}

问题是只有在$scope.record.field具有值之后才应检查if条件。

我尝试将其放入像这样的$q $q.all($scope.record.field).then(func)但没有用.

我也尝试在$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);
})();

编辑假设您有一个控制器,如下所示:

'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);
})();

注意:添加验证以防止可能出现的问题

备注:基本上你创建一个服务,允许你在不同的主动控制器之间共享状态,MyService允许你创建一个承诺,可以通过设置值随时解决。请注意,尽管每个承诺只能调用一次解析