加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS – 绑定/观察返回promise的函数

发布时间:2020-12-17 16:58:50 所属栏目:安全 来源:网络整理
导读:我在AngularJS github上发布了 an issue,但它似乎没有得到很多关注,我自己无法修复它,因为它是一个非常低级别的问题,所以我认为是时候寻找一个解决方法. Angular允许您将一个promise(或带有.then(…)函数的任何东西)放入您的范围,一旦解析,所有$watches和绑
我在AngularJS github上发布了 an issue,但它似乎没有得到很多关注,我自己无法修复它,因为它是一个非常低级别的问题,所以我认为是时候寻找一个解决方法.

Angular允许您将一个promise(或带有.then(…)函数的任何东西)放入您的范围,一旦解析,所有$watches和绑定到该promise的任何内容都将使用已解析的值.当您使用函数返回promise时会出现问题,因为它不适用 – 它像普通对象一样处理.

例如:

var helloDef = $.Deferred();
$scope.hello = helloDef.promise();

$scope.getHello = function() {
    return $scope.hello;
};

$timeout(function() {
    helloDef.resolve('Hello!');
},1000);

Fiddle

这里使用ng-bind =“hello”工作正常并输出Hello!,但ng-bind =“getHello()”输出[object Object],因为内部$watch返回promise对象.使用$q而不是$.Deferred工作方式相同.

在我的实际代码中,我在第一次调用函数时创建了promise,所以我不能只是预先做出承诺并在范围内引用它.

我还需要它不仅仅是ng-bind,所以制作我自己的绑定指令来正确处理这种情况是不可行的.

有人有主意吗?如果数据没有得到解决,我现在正在返回承诺,如果有数据,我正在返回实际结果,但这很难处理.任何与数据绑定的内容都会在加载数据时短暂地产生奇怪的副作用,例如使用promise对象而不是使用已解析的值创建元素的ngRepeat.

谢谢.

更新:拉请求:https://github.com/angular/angular.js/pull/3605

更新2:为了将来参考,自动承诺展开已在1.2 brach中弃用.

解决方法

对于某些事情,我使用$resource.如果我需要等待它,$然后效果很好:

var r = $resource...get...
var p = r.$then...

否则,我构建自己的资源类对象,这不是一个承诺,但有一个我可以等待的承诺.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读