两个函数的 Javascript 回调()

标签 javascript callback

我有两个关于 JavaScript 回调的问题。

第一: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();
      })
   });
}

是否可以使 postDatadeleteData 异步运行,并在两者完成后运行refresh

-----编辑-----

为了确保在循环完成后发送回调,我使用如下代码:

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

但它看起来很丑......我希望有一个更干净的解决方案......

回复Ivan,Angular也有http请求的回调,我不需要使用$ajax,并且我不想为每个http请求回调

最佳答案

是的,使用 $q Promise 库,你可以实现这一点。 如果您使用的是 Angular,$q 已经在您的项目中,只需将其包含在您正在使用的服务/ Controller 中即可。

$q.all正是您正在寻找的东西。

外观示例:

var promises = [];

// loop x times
for(var i = 0; i < items.length; i ++){
    var promise = $http.post("http://www....", item[i]);
    promises.push(promise);
}

// Refresh will be called when all posts are completed.
$q.all(promises).then(refresh); 

关于两个函数的 Javascript 回调(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30300587/

相关文章:

javascript - jQuery $.get 从 https 站点到 http

php - 将变量传递给回调 PHP

javascript - 停止 javascript 执行直到 jquery JSON 响应

jquery - $.post 总是返回未定义

javascript - 递归函数完成后退出node.js

javascript - AngularJS Typeahead 回调函数

javascript - Angular ChartJS 多种图表类型

javascript - Nodejs 4.x 上的 ES6 代码 : Is V8 4. 5 直接运行 ES6 的原生 JS 引擎?

Javascript 高级鼠标悬停

javascript - 使用 javascript 计算总计