如何在angularjs中完成foreach循环后运行脚本

时间:2017-12-01 10:22:17

标签: angularjs foreach

我希望在foreach循环完成执行后运行脚本,

// Code goes here
var app=angular.module('test',[]);
app.controller('testCtrl',function($scope,$timeout,$q){
  var values = {name: 'misko', gender: 'male'};
  var log = [];
  angular.forEach(values, function(value, key) {
   $timeout(function () {
       console.log('foreach running');
       log.push(key + ': ' + value);
    }, 50000);
  });
  $q.all(log).then(function(){
    console.log(log);  
  })


})

在上面的代码中log数组值是在forEach循环中创建的我想在log执行完成后打印foreach数组中的值,我该怎么办?做到了吗?

修改

当我在$timeout angulr.forEach周期内console.log使用angular.forEach时,为什么会这样?我可以在哪里询问该呼叫是同步还是异步?

2 个答案:

答案 0 :(得分:1)

var values = {name: 'misko', gender: 'male'};
  var log = [];
  var promises = [];
  angular.forEach(values, function(value, key) {
   var defer = $q.defer();
   promises.push(defer.promise);
   $timeout(function () {
       console.log('foreach running');
       log.push(key + ': ' + value);
       defer.resolve();
    }, 50000);
  });
  $q.all(promises).then(function(){
    console.log(log);  
  })

答案 1 :(得分:1)

因为你没有运行不需要$ q的异步代码所以你可以简单地在循环之后放入console.log(log),它将在循环完成后运行并且代码就像那样

#include <functional>
std::map<std::string, std::function<void()>> myMap {
    { "text1", []() { /*function #1 code*/ } },
    //...
    { "textn", []() { /*function #n code*/ } }
};