q。在承诺完成之前返回

时间:2014-03-10 23:18:31

标签: javascript node.js promise q

我正在尝试使用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');   
                });
        },

我尝试过同时使用done&amp; then之后的all方法,但结果相同,则在npm install完成之前返回承诺。

1 个答案:

答案 0 :(得分:4)

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应该返回承诺,而不是回调。