2015-10-06 40 views
1

我试着这样做:包装异步周期无极

console.log("start spinner!"); 
for (var i = 0; i < modules.length; ++i) { 
    var filename = modules[i].filename; 
    $.get('./views/templates/'+ filename).done(function(data){ 
      modulesTemplates.push(data); 
      console.log(data); 
     }).fail(); 
} 

如何对于具有回调或承诺包装这整个周期呢? 我试图与bluebirdjs,是这样的:

Promise.all([ modulesTemplates ]) 
     .then(function(data){ 
      console.log(course.modulesTemplates); 
      loadView('home.html'); 
      console.log("stop spinner!"); 
}); 

但它不工作。我是否错过了一些东西,或者这是一个更好的方法吗?

的console.logs的顺序:

开始微调!
[]
停止微调!
tempalte 1
模板2

+0

你希望所有的请求并发(同时)还是顺序的(一个接一个地)? –

+0

sequential以正确的顺序加载模板,因为我想以线性方式加载 –

+0

您以正确的顺序加载它们,但仍然同时发出请求。 –

回答

3

随着蓝鸟,假设请求可以在飞行一次,你可以这样做:

console.log("Start Spinner"); 
Promise.map(modules, function(module){ 
    return $.get('./views/templates/' + module.filename); 
}).then(function(modulesTemplates){ 
    // module template is a list of all the templates loaded here 
    // this code will be reached after all are loaded, for example 
    // modulesTemplates[0] is the first template. 
    console.log("Stop Spinner"); 
}); 
+0

太棒了!谢谢,我想那个.map()比.all() –