这个承诺看起来是否正确?

时间:2014-02-04 07:11:18

标签: angularjs coffeescript

这似乎应该是将数据传递到我的范围,但事实并非如此,是否有任何直接跳出错误的代码如下?

angular.module('Lunch.services', [])
  .factory 'LunchMates', ($q, $http) ->
    LunchMates = 

      getLunchMates: () ->
        d = $q.defer(); 
        $http.get('/lunchers').then (response, status) ->
          if response.status == 200
            d.resolve(response.data)
        return d.promise

    return LunchMates


angular.module('Lunch.controllers', [])
  .controller('LunchCtrl', ($scope, LunchMates) ->
    $scope.lunchers = LunchMates.getLunchMates()
  )

1 个答案:

答案 0 :(得分:2)

此代码:$scope.lunchers = LunchMates.getLunchMates()设置范围的承诺,它依赖于旧的弃用功能。

版本> = 1.2 开始,承诺展开已弃用,这是breaking commit

  

此提交禁用承诺展开和添加   $ parseProvider.unwrapPromises()getter / setter api允许开发人员   如果需要,重新打开该功能。 承诺展开支持   将来会从Angular中删除,此设置仅允许   在过渡期间启用它。

     

..........

     

以前承诺在表达式中的表达式中的任何位置找到   评估将在未解决时评估为未定义且未评估   履行价值,如果履行。

     

..........

     

BREAKING CHANGE :$解析和模板一般将不再   自动解包承诺。此功能已被弃用   如果绝对需要,可以在过渡期间重新启用   通过$parseProvider.unwrapPromises(true) api。

您仍然可以使用$parseProvider启用它,如下所示:

angular.module('Lunch.controllers', [])
  .config( ($parseProvider) ->
    $parseProvider.unwrapPromises(true)
    $parseProvider.logPromiseWarnings(false)
  )

但它会在未来版本中破坏(如上所述),所以改为:

angular.module('Lunch.controllers', [])
  .controller( 'LunchCtrl', ($scope, LunchMates) ->
    LunchMates.getLunchMates().then (data)->
      $scope.lunchers = data
  )

这个问题(在其他一些问题中)很常见,主要是因为很多教程和新开发人员在网上找到的书籍是在1.2版之前编写的,因此不是最新的。始终与https://github.com/angular/angular.js/blob/master/CHANGELOG.md

保持同步