2017-01-20 12 views
1

мне нужно вызвать список restangular.post внутри цикла, чтобы добавить много пользователей (например)Restangular пост в цикле

У меня есть завод, который сделать что-то подобное:

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

затем в контроллере в необходимости вызвать этот завод внутри цикла:

for(var us in users){ 
createUser(us); 
} 

проблема заключается в том, что я не могу это сделать! он добавляет всегда только последний пользовательский объект !, так как делать $ q.all() с помощью Restangular, или есть какое-то другое решение?

ответ

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 
}); 
1

Хорошо, поэтому проблема слишком мала.

Проблема в том, что вы вызываете функцию createUser внутри цикла. Таким образом, ваш цикл продолжает выполняться, но Post request не выполняется. И, следовательно, ваш последний пользовательский объект будет сохранен только.

Так что вы можете сделать:

Вы должны сделать рекурсивную функцию где, когда ваши первые объекты спасаются затем вызвать ту же функцию со вторым объектом и так далее.

ИЛИ

Вы можете попробовать с функцией Callback. Сначала прочитайте, как работает функция обратного вызова.

Здесь я использовал функцию обратного вызова. Может быть, это поможет вам.

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++; 
    }); 
} 
} 

Теперь вам нужно позвонить только функцию сохранения. Здесь пользователи представляют собой массив, содержащий все объекты пользователей.

+0

спасибо, но как это сделать пожалуйста? –

+0

Я обновил ответ с помощью кода. И я использовал функцию обратного вызова. –