【问题标题】:q.all being returned before promise is completedq.all 在承诺完成之前返回
【发布时间】:2014-03-11 07:31:49
【问题描述】:

我正在尝试使用q.all 来管理多个npm install module_name 方法的进程。

奇怪的是,看起来好像在承诺完成之前就返回了承诺。

installNodeModules: function(module_list){
            function installModule(module_name){
                var defer = q.defer();
                console.log(module_name);
                exec_child_process('npm install '+module_name, function(err,stdout,stderr){
                    if(err) defer.reject(err);
                    defer.resolve();
                    return defer.promise;
                });
            }

            var promise_array = [];
            for (var i =0; i<module_list.length;i++){
                promise_array.push(installModule(module_list[i]));   
                console.log('promises array created');
            }

             q.all(promise_array).done(function(){
                    console.log('promises returned');   
                });
        },

我尝试在all 之后同时使用donethen 方法,但结果相同,承诺在npm install 完成之前返回。

【问题讨论】:

    标签: javascript node.js promise q


    【解决方案1】:

    installModule 应该这样写:

            function installModule(module_name){
                var defer = q.defer();
                console.log(module_name);
                exec_child_process('npm install '+module_name, function(err, stdout, stderr){
                    if(err) { 
                       defer.reject(err);
                    } else {
                       defer.resolve();
                    }
                });
               return defer.promise;
            }
    

    应该返回承诺的是installModule,而不是回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 2015-07-18
      • 2020-05-17
      相关资源
      最近更新 更多