Javascript q、 在承诺完成之前,所有物品均已归还

Javascript q、 在承诺完成之前,所有物品均已归还,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,我正在尝试使用q.all来管理多个npm安装模块\u name方法的过程 奇怪的是,似乎在承诺完成之前,承诺就已经得到了回报 installNodeModules: function(module_list){ function installModule(module_name){ var defer = q.defer(); console.log(module_name);

我正在尝试使用
q.all
来管理多个
npm安装模块\u 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');   
                });
        },
installNodeModules:函数(模块列表){
函数installModule(模块名称){
var defer=q.defer();
控制台日志(模块名称);
执行子进程(“npm安装”+模块名称、功能(err、stdout、stderr){
如果(错误)延迟。拒绝(错误);
defer.resolve();
回报、承诺;
});
}
var_数组=[];

对于(var i=0;i
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
,而不是回调。

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