【问题标题】:does this promise look correct?这个承诺看起来正确吗?
【发布时间】:2014-02-28 01:08:21
【问题描述】:

这似乎应该向我的范围提供数据,但事实并非如此,下面的代码是否有任何直接跳出错误的地方?

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()
  )

【问题讨论】:

  • 如果response.status 不是 200 怎么办?如果状态码不等于 200,你必须拒绝承诺...
  • 你不应该检查 then 方法中的状态码,then 方法接受两个函数,一个是成功函数,另一个是失败函数,成功一个你可以解决承诺,失败你可以失败承诺跨度>
  • 返回的是什么。我认为在控制器中方法应该是LunchMates.getLunchMates().then(function(data) { $scope.lunchers=data;});

标签: angularjs coffeescript


【解决方案1】:

这段代码:$scope.lunchers = LunchMates.getLunchMates() 在作用域上设置了一个承诺,它依赖于一个旧的不推荐使用的功能。

版本 >=1.2 开始,promise unwrapping 已弃用,这是breaking commit

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

.......

以前在表达式中的任何地方都可以找到的 promise 评估将在未解决时评估为 undefined 和 履行时的履行价值。

.......

重大变化:$parse 和一般模板将不再 自动解包承诺。此功能已被弃用,并且 如果绝对需要,它可以在过渡期间重新启用 通过$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了解最新动态

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多