我对AngularJS中的承诺有两个问题:
请参阅以下代码:
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 ...');
}
}
}
代码:
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
}
}
答案 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)
对于第二个问题,请在urlArr
上Array.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错误。