У меня есть два вопроса относительно обратного вызова JavaScript.Javascript callback() для двух функций
Во-первых: Выполняется ли цикл for
асинхронно? То есть, в функции:
function postData(items, callback)
{
for(var i=0 ; i < items.length ; i++)
{
//angularjs Post request
$http.post("http://www....", item[i]);
}
callback();
}
Будет callback()
подождать до завершения цикла?
Во-вторых: Как я могу ждать обратного вызова двух функций?
У меня есть другая функция deleteData(items, callback)
, что я хочу запустить асинхронный с postData()
. Когда все будет сделано, я хочу сделать «обновление».
Сейчас я использую:
function postData(items, callback)
{
for(var i=0 ; i < items.length ; i++)
{
//angularjs Post request
$http.post("http://www....", item[i]);
}
callback();
}
function deleteData(items, callback)
{
for(var i=0 ; i < items.length ; i++)
{
//angularjs delete request
$http.delete("http://www....", item[i].id);
}
callback();
}
function refresh()
{
$http.get("www....").success....
}
function doit(post, delete)
{
postData(post, function(){
deleteData(delete, function(){
refresh();
})
});
}
Можно ли сделать postData
и deleteData
запустить assync и когда оба сделали запустить refresh
?
----- EDIT -----
Чтобы убедиться в том, что обратный вызов отправить после цикла будет сделано, я использую такой код:
function postData(items, callback)
{
if(items.length == 0)
callback();
for(var i=0 ; i < items.length ; i++)
{
//angularjs Post request
$http.post("http://www....", item[i]);
if(i == items.length-1)
callback();
}
callback();
}
Но это выглядит уродливый ... Я надеялся на более чистое решение ...
Ответ на Иван, Угловой имеет также обратный вызов для http-запросов, мне не нужно использовать $ ajax, и я не хочу обратного вызова для каждого http-запрос
Это именно то, что мне нужно ... И спасибо за обновленный ответ с примером – NunoRibeiro