Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

关于promise的疑惑,求点思路

$
0
0

QQ20160825-0.png

前三个箭头是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);
}


Viewing all articles
Browse latest Browse all 14821

Trending Articles