在AngularJS中处理$ q.all和promises时出错

埃里克·米特詹斯(Eric Mitjans)

给出以下代码:

function Ctrl($scope, $http, $q) {
  var search = function(name) {
    if (name) {
      $http.get('http://api.discogs.com/database/search?type=artist&q='+ name +'&page=1&per_page=5').
        success(function(data3) {
          $scope.clicked = false;
          $scope.results = data3.results;
        });
    }
    $scope.reset = function () {
      $scope.sliding = false;
      $scope.name = undefined;
    };
  };
  $scope.$watch('name', search, true);

var done = $scope.getDetails = function (id) {
    $scope.clicked = true;
    $scope.sliding = true;
    var api = 'http://api.discogs.com/artists/';
    return $q.all([$http.get(api + id),
                  $http.get(api + id + '/releases?page=1&per_page=100')]);
};

done.then(function (){
 $scope.releases = data2.releases;
 $scope.artist = data;
 return $http.get('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=e8aefa857fc74255570c1ee62b01cdba&artist=' + name + '&album='+ title +'&format=json');
});

我收到以下控制台错误:

TypeError: Object function (id) {
    $scope.clicked = true;
    $scope.sliding = true;
    var api = 'http://api.discogs.com/artists/';
    return $q.all([$http.get(api + id),
                  $http.get(api + id + '/releases?page=...<omitted>... } has no method 'then'
at new Ctrl (file:///C:/Users/Zuh/Desktop/AngularJS%20Discogs/js/services.js:27:9)

谁能指出我的错误可能在哪里?我正在定义.then,然后执行getDetails ...

这是一个正在工作的柱塞

维托雷

这是您更新的plunkr http://plnkr.co/edit/lTdnkRB1WfHqPusaJmg2?p=preview

angular.module('myApp', ['ngResource']);

  function Ctrl($scope, $http, $q) {
    var search = function(name) {
      if (name) {
        $http.get('http://api.discogs.com/database/search?type=artist&q='+ name +'&page=1&per_page=5').
          success(function(data3) {
            console.log(arguments)
            $scope.clicked = false;
            $scope.results = data3.results;
          });
      }
      $scope.reset = function () {
        $scope.sliding = false;
        $scope.name = undefined;
      };
    };
    $scope.$watch('name', search, true);

    var done = $scope.getDetails = function (id) {
        $scope.clicked = true;
        $scope.sliding = true;
        var api = 'http://api.discogs.com/artists/';
        var q =  $q.all([$http.get(api + id),
                      $http.get(api + id + '/releases?page=1&per_page=100')])
                  .then(function (ret){
                     //console.log(arguments)

                     $scope.releases = ret[1].data.releases;
                     $scope.artist = ret[0];
                     return $http.get('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=e8aefa857fc74255570c1ee62b01cdba&artist=' + name + '&album='+ title +'&format=json');
                   })

        return q
      };

  }

总结修补程序:

  • 将$ q.all()。then()部分移到done方法中

  • 更注意处理程序then部分接收的参数

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS Promises,$ q,延迟

来自分类Dev

Error dealing with $q.all and promises in AngularJS

来自分类Dev

使jQuery Deferred / Promises和AngularJS $ q Deferred / Promises兼容

来自分类Dev

AngularJS $ q.all和多个$ q.defer

来自分类Dev

Q库(javascript)-使用Q.all()在承诺中处理q.reject()

来自分类Dev

AngularJS处理$ q.all中被拒绝的资源

来自分类Dev

AngularJS处理$ q.all中被拒绝的资源

来自分类Dev

$ q.reject和AngularJS链式诺言中的处理错误

来自分类Dev

AngularJS承诺$ q.all和SignalR

来自分类Dev

AngularJS承诺$ q.all和SignalR

来自分类Dev

AngularJs $q.all 使用

来自分类Dev

AngularJS和Q.fcall

来自分类Dev

AngularJS和Q.fcall

来自分类Dev

q.all()进行重复的ajax调用(Angularjs,$ http,$ q)

来自分类Dev

如何处理可能是angularjs中$ q承诺的对象?

来自分类Dev

如何在AngularJS的$ q中处理单个404

来自分类Dev

使用$ q处理AngularJS中的异步SQL调用

来自分类Dev

使用$ q.all()从AngularJS中的函数获取$ http数据

来自分类Dev

Q.all未处理的拒绝原因

来自分类Dev

使用角度$ q.all处理错误

来自分类Dev

跳过Q Promises中的then函数的正确方法

来自分类Dev

NodeJS:在Q中循环使用Promises

来自分类Dev

$ q,$ http和结果的并行处理

来自分类Dev

AngularJS-对$ q.all()的恢复失败

来自分类Dev

angularjs $ q和$ http关于承诺

来自分类Dev

在angularjs中计算待处理的$ q承诺

来自分类Dev

在angularjs中计算待处理的$ q承诺

来自分类Dev

Q Promises-将拒绝转换为未处理的异常

来自分类Dev

在承诺链中容纳Q.all