在Promise

时间:2015-10-06 06:47:24

标签: javascript asynchronous promise bluebird

我正在尝试做类似的事情:

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

1 个答案:

答案 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");
});