我正试图将一个承诺绑定到一个观点上。 我不知道你是否可以直接做到这一点,但这正是我想要做的。 任何想法我做错了什么? 注意:源代码有点过时了,并使用静态数据,但是这样可以使代码更易于诊断。 编辑: JSFiddle页面: http : //jsfiddle.net/YQwaf/27/ 编辑:解决scheme:原来,你可以直接绑定承诺。 我的原始代码有两个问题: 使用setTimeout()而不是angular度的$超时是一个问题。 Angular不知道在触发超时时需要刷新UI(可以使用$ scope解决这个问题,也可以在setTimeout中使用$ apply,也可以使用$ timeout) 绑定到返回承诺的函数是一个问题。 如果第二次被调用,这又是一个承诺。 更好的办法是将范围variables设置为承诺,并根据需要创build新的承诺。 (在我的情况下,这是在国家代码中调用$ scope。$ watch) HTML: <div ng:controller="addressValidationController"> Region Code <select ng:model="regionCode" ng:options="r.code as r.name for r in getRegions()"/> Country Code<select ng:model="countryCode"><option value="US">United States</option><option value="CA">Canada</option></select> </div> JS: function addressValidationController($scope, $q) { var regions = { US: [{code: 'WI',name: […]
我正在尝试编写一个返回promise的函数。 但是,有些时候所要求的信息是可以立即得到的。 我想把它包装在一个承诺,使消费者不需要作出决定。 function getSomething(id) { if (Cache[id]) { var deferred = $q.defer(); deferred.resolve(Cache[id]); // <– Can I do this? return deferred.promise; } else { return $http.get('/someUrl', {id:id}); } } 像这样使用它: somethingService.getSomething(5).then(function(thing) { alert(thing); }); 问题是,callback没有执行预先解决的承诺。 这是一个合法的事情吗? 有没有更好的方法来处理这种情况?
根据AngularJS doc ,调用$http返回如下内容: 使用标准then方法和两个特定于http的方法返回promise对象: 成功和错误 。 then方法接受两个参数成功和一个错误callback,这个callback将被一个响应对象调用。 成功和错误方法采用一个参数 – 一个函数,当请求成功或失败时将被调用。 传递给这些函数的参数是传递给then方法的响应对象的解构表示。 除了response对象在一个案例中被解构的事实,我没有区别 那么成功/错误的callback函数将作为promise.thenparameter passing callback函数作为promise的promise.success / promise.error方法的parameter passing 有没有? 这两种不同的方式通过看似相同的callback有什么意义?