账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    node.js 导出异步结果怎么处理
    39
    0
    1. 项目要上devops,之前通过配置文件获取项目的配置项,现改为从配置中心拉取配置项,将之前的配置文件同步加载修改为通过接口获取etcd中的配置项,发现无法将异步获取的结果导出?

    代码如下:

    # 修改前的代码
    var baseConfigFilePath      = '../base-config.yaml';  // 基础配置文件路径
    var customConfigFilePathEnv = 'CONFIG_PATH';  // 自定义配置文件路径环境变量名
    
    var loadFile = exports.loadFile = function loadFile() {
      var baseConfigFileFullPath = path.join(__dirname, baseConfigFilePath);
      var customConfigFilePath   = process.env[customConfigFilePathEnv];
    
    
      var fileData, obj;
    
    
    
      /* 读取基础配置文件 */
      fileData = fs.readFileSync(baseConfigFileFullPath);
      obj = yaml.load(fileData);
    
       // 使用自定义配置覆盖基础配置
      if (!toolkit.isNullOrWhiteSpace(customConfigFilePath)) {
        var customFileData = fs.readFileSync(customConfigFilePath);
        var customObj = yaml.load(customFileData);
        
        // 覆盖基础配置文件
        toolkit.objUpdate(customObj, obj);
      }
    
      exports.CONFIG = obj;
    };
    
    loadFile();

    修改后

    var loadFile = exports.loadFile = function loadFile() {
      var baseConfigFileFullPath = path.join(__dirname, baseConfigFilePath);
      var customConfigFilePath   = process.env[customConfigFilePathEnv];
    
      var fileData, obj;
    
    
      /* 读取基础配置文件 */
      fileData = fs.readFileSync(baseConfigFileFullPath);
      obj = yaml.load(fileData);
    
      // 使用自定义配置覆盖基础配置
      if (!toolkit.isNullOrWhiteSpace(customConfigFilePath)) {
        // var customFileData = fs.readFileSync(customConfigFilePath);
        // var customObj = yaml.load(customFileData);
        request(customConfigFilePath, function(error, response, data) {
          if (error) {
            console.log('配置中心', colors.red('获取配置失败'));
          }
          var resData = JSON.parse(data);
    
          if (resData.errorCode) {
            console.log('配置中心', colors.red('获取配置失败'));
          }
    
          var customObj = toolkit.fromBase64(resData.node.value);
          toolkit.objUpdate(customObj, obj);
        })
      }
    
      exports.CONFIG = obj;
    };

    exports是同步处理的方式,无法导出etcd获取的数据,在保持源码大致逻辑不变的情况下,怎么处理该问题?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部