先把例子代码贴上:
//得到N个简明的学校信息
getSchoolsSummary: function() {
var deferred = $q.defer();
$http({
method: 'GET',
url: '/api/schools'
}).success(function(res) {
if (res._metadata.code === 200 && res.data) {
deferred.resolve(res.data);
} else {
deferred.reject(res._metadata.message);
}
});
return deferred.promise;
}
asyncGetSchools: function() {
var outer_deferred = $q.defer();
//先得到N个学校的简明信息,只包括id,学校名称...
getSchoolsSummary().then(function(schools) {
var promises = schools.map(function(school) {
var deferred = $q.defer();
//传id进去,得到每个学校的详细信息
$http({
method: 'GET',
url: '/api/schools/' + school.id
}).success(function(res) {
if (res._metadata.code === 200 && res.data) {
deferred.resolve(res.data);
} else {
deferred.reject(res._metadata.message);
}
});
return deferred.promise;
});
//搞定,得到所有学校的详细信息
$q.all(promises).then(function(data) {
outer_deferred.resolve(data);
}, function(error) {
outer_deferred.reject(error);
});
});
return outer_deferred.promise;
}
如果我要把asyncGetSchools包装到一个init函数中,init内又得写成:
init : function() {
//do something
do_something();
var deferred = $q.defer();
var promise = asyncGetSchools();
promise.then(function(data) {
//success
deferred.resolve(data);
},function(error) {
deferred.reject(error);
});
return deferred.promise;
}
有没有更好的写法呢?
//得到N个简明的学校信息
getSchoolsSummary: function() {
var deferred = $q.defer();
$http({
method: 'GET',
url: '/api/schools'
}).success(function(res) {
if (res._metadata.code === 200 && res.data) {
deferred.resolve(res.data);
} else {
deferred.reject(res._metadata.message);
}
});
return deferred.promise;
}
asyncGetSchools: function() {
var outer_deferred = $q.defer();
//先得到N个学校的简明信息,只包括id,学校名称...
getSchoolsSummary().then(function(schools) {
var promises = schools.map(function(school) {
var deferred = $q.defer();
//传id进去,得到每个学校的详细信息
$http({
method: 'GET',
url: '/api/schools/' + school.id
}).success(function(res) {
if (res._metadata.code === 200 && res.data) {
deferred.resolve(res.data);
} else {
deferred.reject(res._metadata.message);
}
});
return deferred.promise;
});
//搞定,得到所有学校的详细信息
$q.all(promises).then(function(data) {
outer_deferred.resolve(data);
}, function(error) {
outer_deferred.reject(error);
});
});
return outer_deferred.promise;
}
如果我要把asyncGetSchools包装到一个init函数中,init内又得写成:
init : function() {
//do something
do_something();
var deferred = $q.defer();
var promise = asyncGetSchools();
promise.then(function(data) {
//success
deferred.resolve(data);
},function(error) {
deferred.reject(error);
});
return deferred.promise;
}
有没有更好的写法呢?