gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:01:34 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com