javascript - 我可以创建一个 promise 来检查变量是否以 Angular 设置?

标签 javascript angularjs q

我有一个范围变量,它是在几次请求和一些逻辑执行之后设置的,如下所示 $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/

相关文章:

javascript - 如何从状态 url 路由中删除感叹号 Mean full stack

javascript - 生成器 + promise 并行化 N 个项目

javascript - 在 states.js 中使用多个解析

javascript - Typescript Kendo UI 网格列类型错误

javascript - 显示包含对象和图标的数组

javascript - 如何使用 jQuery 在多个单选按钮中选择最新选中的单选按钮

javascript - 简单的 Q Promise Node 示例

javascript - 如何判断Javascript Q deferred()是否已经执行完链中的所有函数

javascript - 拼接数组时的奇怪行为,javascript

javascript - 我怎样才能获得这种格式的实际日期?