如何获得已经解决的承诺价值?

sth*_*mps 16 angularjs

我承诺在我的UI中绑定.当promise解析并且UI元素呈现时,我可以单击该UI元素.在我处理单击的控制器代码中,我想对promise的值进行操作.在我的角度代码的这一点上,我已经知道承诺已经解决了......但是当我想要获得价值时,它仍然是一个承诺.

什么是获得承诺价值的最佳方式...鉴于我知道它必须已经解决了?

Jos*_*ler 22

承诺永远是承诺 - 这就是它们应该如何.虽然可以将promise直接绑定到视图,但我通常不鼓励这种做法,因为它缺乏透明度并且可能导致视图闪烁.更好的解决方案是在then调用中分配范围值:

myService.then(function( val ) {
  $scope.val = val;
});
Run Code Online (Sandbox Code Playgroud)

什么时候$scope.val准备就绪,它总是可以直接作为一个值来处理 - 因为它是.

也就是说,如果你想直接进行承诺分配,你只需将其视为承诺; 也就是说,你需要打电话promise.then(function () { ... });.这看起来很不方便,但它实际上证明了承诺的强大程度.

如果您想了解有关承诺的更多信息,我会为最近的Google+环聊向他们提供一些代码示例(并提供代码示例),其中我介绍了AngularJS中的承诺的优势,常见用途和最佳做法:AngularJS Hangout - Promises,Promises Promises ,承诺.永无止境的承诺链的想法是专门解决的,尽管我没有时间码.

希望这可以帮助!

  • 这里的便利是由Angular提供的,因为当promise被解析时,它将返回到$ scope.val,因此绑定到UI上的模型.但是,还有许多其他情况,例如框架为您提供的函数不接受承诺.例如myFrameworkFunction(){return aValue;}.如果在那里返回deferred.promise,将显示的值将是[Object object].那就是我们需要像defer.promise.value(); ,目前不是由$ q提供的. (2认同)