根据最佳实践,我为所有不同的API调用块创建了一个服务,并将该文件称为api.js;
这是一个例子。
api.service('Auth', function(Config, $http, $q, $state) {
this.login = function(jsonToSend) {
return $http.post(Config.apiurl + '/user/auth/login', jsonToSend)
.then(function(response) {
return response.data;
}, function(error) {
return $q.reject(error.data);
});
};
// Api function for signing the user up
this.signup = function(jsonToSend) {
return $http.post(Config.apiurl + '/user/auth/signup', jsonToSend)
.then(function(response) {
return response.data;
}, function(response) {
return $q.reject(response.data);
});
};
});
现在在我的loginController.js中,我将此服务注入其他服务。现在我想要的是。
Auth.Login()
.User.getUser()
.User.getCart()
.Item.getProduct()
我的小孩尝试。我知道这是错的,但社区要求你展示你的所作所为。
var q = $q.defer() //intialize
Auth.login().then(function(response){
//some manipulation and store stuff in data
$q.resolve(data);
})
.then(function(data){
})
我想像这样链接他们。我知道代表是错误的,但我希望你能理解我在这里要做的事情。
我有另一个选择通过async.js / underscore.js的瀑布方法来做到这一点,但我想提高我对promises的知识,因此想知道这种方法是否可行。 谢谢。
答案 0 :(得分:1)
你可以像这样保存对vars的承诺:
var loginPromise = Auth.login();
var userPromise = User.getUser();
var chartPromise = User.getCart();
var productPromise = Item.getProduct();
然后你可以等待所有的承诺来解决,并对结果做这样的事情:
$q.all([loginPromise, userPromise , chartPromise , productPromise]).then(function(data){
/* You can Access each promise data with the index of the order you put them into $q.all(..
* data[0], data[1], data[2], data[3]
*/
});