Angularjs使用promises

时间:2016-04-22 10:34:21

标签: javascript angularjs

您好我正在尝试将yelp api集成到我的角度应用中。

 var params = {
        callback: 'angular.callbacks._0',
        location: 'San+Francisco',
        oauth_consumer_key: 'xxxxxxx', //Consumer Key
        oauth_token: 'xxxxxxxxxxxx', //Token
        oauth_signature_method: 'HMAC-SHA1',
        oauth_timestamp: new Date().getTime(),
        oauth_nonce: Math.random().toString(36).substring(7),
        term: 'Itailian',
        limit: 5
      };
      var consumerSecret = 'xxxxxxxxxxxxxx';
      var tokenSecret = 'xxxxxxxxxxx';
      function generateSignature(method, yelpURL, params, consumerSecret, tokenSecret) {
    return oauthSignature.generate(method, yelpURL, params, consumerSecret, tokenSecret, {encodeSignature: false});
  }
    params['oauth_signature'] = generateSignature(method, yelpURL, params, consumerSecret, tokenSecret);


//Doest work even if I push below call in array and then do $q.all(promisesArra).

var defered = $q.defer();
        $http.jsonp(yelpURL, {params: params})
          .success(function (data) {
            defered.resolve(data);
            $localStorage[cusine] = data;
          })
          .error(function (error) {
            console.log('failed', error);
          });
        return defered.promise;

我想针对不同的术语进行多次调用示例:意大利语,墨西哥语,.. 我可以进行一次jsonp调用但不是多次调用。

我不确定这个问题。我猜这是因为angular中的回调是硬编码的,只能是angular.callbacks._0

1 个答案:

答案 0 :(得分:0)

$http.jsonp已经返回了一个承诺,因此无需使用$q.defer()。此外,自{1.4}起,$http.success$http.errordepreciated。相反,使用then()来解决您的承诺:

$http.jsonp(yelpURL, params).then(
          function (data) { // successcallback                
            $localStorage[cusine] = data;
          }, function (error) { // errorcallback
            console.log(error);
          });

这是一个有效的jsfiddle:http://jsfiddle.net/saarmstrong/hYACX/8/light/