如何创造自己的承诺?

时间:2014-09-06 01:27:02

标签: javascript angularjs angular-promise

我对AngularJS中的承诺有两个问题:

  1. 我如何创建自己的承诺?
  2. 请参阅以下代码:

    function controller($http) {
         var dataCache;
    
         function getData(){        
    
            if( dataCache != null ){
                 // should return my own promise here 
                 // to pass the value of 'dataCache' to 'then' immediately
            } else {
                return $http.get('...some url ...');
            }
        }
    }
    
    1. 如何归还最后的承诺?
    2. 代码:

      function controller($http) {
      
           var urlArr = ['url1', 'url2', 'url3'];
      
           function getDataOneByOne() {
                // should call $http.get() for the url in the 'urlArr' one after another in a chain
                // and return the last promise
           }
      }
      

2 个答案:

答案 0 :(得分:2)

对于第一个问题,我相信你正在寻找$q.when()。它在promise中包含一个正常值并解析它。

function getData(){        

  if( dataCache !== null ) {
    $q.when(dataCache);      
  } else {
    return $http.get('...some url ...');
  }

}

getData.then(function() {

});

请参阅Klaster对第二个问题的回答。

答案 1 :(得分:2)

对于第二个问题,请在urlArrArray.prototype.reduce并建立承诺链:

function controller($http, $q) {

    var urlArr = ['url1', 'url2', 'url3'];

    function getDataOneByOne() {
        return urlArr.reduce(function (chain, url) {
            return chain.then(function () {
                return $http.get(url);
            });
        }, $q.when());
    }
}
但是,不要忘记处理$ http错误。