前三个箭头是promise的函数,在前三个执行完后,但是执行到第四个箭头的时候,代码就没有继续执行下去了,不管此处是promise 形式的方法还是普通的回调方法 思考了很久没有想清楚为什么没有执行,可能会是prmoise的嵌套不能太多么? 下面是实际的代码
var path = require('path');
var fs = require('fs');
var yaml = require('js-yaml');
var exec = require('child_process').exec;
var express = require('express');
// 但是这个global 如果很多应用都使用就会被污染了
var logger = global.thisapp.logger;
var express_app = global.thisapp.express_app;
// app的根目录,此目录下的文件夹 都是各个项目
var apps_root = path.join(__dirname, '../../' + global.thisapp.appConfigYaml.apps_root);
console.log(apps_root);
function readFile(_path) {
return new Promise((resolve, reject) => {
fs.readFile(_path, 'utf8', (err, data) => {
if (err) {
reject(err);
} else {
resolve(data.toString());
}
});
});
}
function readdir(_path) {
return new Promise((resolve, reject) => {
fs.readdir(_path, (err, files) => {
if (err) {
reject(err);
} else {
resolve(files);
}
});
});
}
function fileStat(_path) {
return new Promise((resolve, reject) => {
fs.stat(_path, function(err, stats) {
if (err) {
reject(err);
} else {
resolve(stats);
}
});
});
}
function init() {
readdir(apps_root).then((files)=>{
for (let file of files) {
let filePath = path.join(apps_root, file);
fileStat(filePath).then((stats)=>{
if(stats.isDirectory()){
fileStat(path.join(filePath, 'index.js')).then((stats)=>{
execChildProcess('node ' + path.join(tempPath, 'index.js'));
},(err)=>{
logger.error(file,'下没有index.js文件');
// promise 的形式 下面代码也不执行
fs.readFile(path.join(tempPath, 'web.yaml'), 'utf8', (err, data) => {
if (err) {
logger.info('读取配置文件出错');
} else {
var webYaml = yaml.safeLoad(data.toString());
loadController(webYaml, tempPath, tempFile);
}
});
// readFile(path.join(tempPath, 'web.yaml')).then((data)=>{
// var webYaml = yaml.safeLoad(yamlFile);
// loadController(webYaml, tempPath, tempFile);
// },(err)=>{
// logger.info('读取配置文件出错');
// });
});
}
},(err)=>{
logger.error('读取',file,'出错');
});
}
},(err)=>{
logger.info('读取',apps_root,'文件夹出错');
});
}
function execChildProcess(directive) {
exec(directive,function(err,stdout,stderr){
if (err) {
logger.info('子进程执行出错');
} else {
logger.info('子进程正常执行');
// logger.info(stdout);
// logger.error(stderr);
}
});
}
init();
function loadController(webYaml, rootPath, rootName) {
logger.info(111111111111111111111);
}