循环中的Restangular帖子

时间:2017-01-20 08:43:52

标签: angularjs restangular

我需要在循环内部调用restangular.post列表,以添加许多用户(例如)

我有一家工厂做过类似的事情:

createUser (user) {
return Restangular.all(URL).post(user);
}

然后在控制器中需要在循环内调用此工厂:

for( var us in users){
createUser(us);
}
问题是我无法做到这一点!它总是只添加最后一个用户对象!,那么如何使用Restangular进行$ q.all(),还是有其他解决方案?

2 个答案:

答案 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
});