我希望在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
时,为什么会这样?我可以在哪里询问该呼叫是同步还是异步?
答案 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*/ } }
};