一个$ http请求到api成功后,Angular $ q库链接方法?

Mat*_*ood 2 javascript ajax asynchronous angularjs angular-promise

我以前从未写过承诺,但我觉得这段代码传达了我的意图.

问题:在我的http请求完成,转换并返回之后, 如何在init块中异步触发matchData()和触发countData().

 function getLangData(langCode) {

    var url = "https://translate.google.com/translate_a/l?cb=JSON_CALLBACK";
      return $q(function(resolve, reject) {    
      $http.jsonp(url, {
        params: {...}
      })
        .success(function (translateAPIData) {
                 return translateAPIData.map(function(){...});
          });
        });

      });
  }

function init() {
  var promise = getLangData(languageCode);
  promise.then(function(mappedData) {
     matchData(mappedData);
  });
  promise.then(function(mappedData) {
     countData(mappedData);
  });  

  }); 
}
Run Code Online (Sandbox Code Playgroud)

Pan*_*kar 5

您不需要使用$q$ http方法创建自己的promise,默认情况下会返回一个promise,您可以通过调用.then它来使用它.

function getLangData(langCode) {

    var url = "https://translate.google.com/translate_a/l?cb=JSON_CALLBACK";
      //returned promise object from method
      return $http.jsonp(url, {
        params: {...}
      })
      .then(function (response) {
           var translateAPIData = response.data;
           return translateAPIData.map(function(){...});
      });
}
Run Code Online (Sandbox Code Playgroud)

您可以通过.then对该方法执行来调用promise 方法.

function init() {
  var promise = getLangData(languageCode);
  promise.then(function(mappedData) {
     matchData(mappedData);
     countData(mappedData);
  }); 
};
Run Code Online (Sandbox Code Playgroud)