我需要在循环内部调用restangular.post列表,以添加许多用户(例如)
我有一家工厂做过类似的事情:
createUser (user) {
return Restangular.all(URL).post(user);
}
然后在控制器中需要在循环内调用此工厂:
for( var us in users){
createUser(us);
}
问题是我无法做到这一点!它总是只添加最后一个用户对象!,那么如何使用Restangular进行$ q.all(),还是有其他解决方案?
答案 0 :(得分:1)
好的,问题太小了。
问题是你在循环中调用createUser函数。所以你的循环继续执行但是Post请求没有得到满足。因此,您的最后一个用户对象只能保存。
所以你能做什么:
你必须使递归函数,当第一个对象被保存时,然后用第二个对象调用相同的函数,依此类推。
OR
您可以尝试回调功能。请先阅读回调函数的工作原理。
这里我使用了一个回调函数。可能对你有帮助。
function createUser(userObject, cb){
Restangular
.all(URL)
.post(user)
.then(function (response){
if(response){
cb(null, response); //user created.. now callback the function
}else{
cb(err, 'error occured');
}
})
.catch(function(ex){
//something bad happened...
})
}
var index = 0;
function save(){
if(users.length != index + 1){
createUser(users[index], function(data){
console.log(data); //this is saved data which is return by callback
index++;
});
}
}
现在你只需要调用保存功能。这里的users是一个包含所有用户对象的数组。
答案 1 :(得分:1)
var promises = [];
for (var us in users) {
promises.push(Restangular.all(URL).post(us);
}
$q.all(promises).then(function (responses) {
// responses is an array with one return value per request made
});