回调不是函数 - JSON 文件读取

callback is not a funcion - JSON file read

我做了一些研究,但我得到的所有回复都没有解决我的问题。 基本上,我有以下代码:

  public static load(lang: string, staReplace: boolean, callback?: (message: string, error?: string) => void) {
    if (!TranslateSingleton.languageFile) {
      TranslateSingleton.languageFile = new Map<string, Object>();
    }
    lang = lang.toLowerCase();
    if (!TranslateSingleton.languageFile.has(lang) || staReplace === true) {
      try {
        let strBody: string = fs.readFileSync(AppConfig.APP_SERVER_DIRETORIO + '/languages/language-' + lang + '.json', 'utf8')
        TranslateSingleton.languageFile.set(lang, JSON.parse(strBody));
        callback('OK', null);

      } catch (ex) {
        AppLog.error('IDIOMA NÃO ENCONTRADO ==>', AppConfig.APP_SERVER_DIRETORIO + '/languages/language-' + lang + '.json');
        callback(null, '## IDIOMA [' + lang + '] não disponível! ##');
      }
    }
  }

并且当 'load' 函数被调用时,我总是得到响应:

1) 在 TS TranslateSingleton 文件中:

TranslateSingleton.load(lang, false, null);

2) 在另一个控制器中:

TranslateSingleton.load(resultToken.lang, true, (resultMessage, errorMessage) => {
              if (errorMessage) {
                resolve(super.trataErro(res, errorMessage));
              } else {
                resolve(super.trataRetorno(req, res, resultMessage));
              }
            });

然后,我的回复:

[2020-06-10T11:47:06.257] [ERROR] default - [APPLOG] IDIOMA NÃO ENCONTRADO ==> [ './../languages/language-pt-br.json' ]
[2020-06-10T11:47:06.259] [ERROR] default - [APPLOG] Erro ao recuperar a chave: "AUDITORIA.REGISTRO_AUDITORIA",  [ TypeError: callback is not a function
      at Function.TranslateSingleton.load (C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\util\translate.js:24:17)
      at TranslateSingleton.__ (C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\util\translate.js:44:32)       
      at C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\service\auditoria.service.js:423:62
      at C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\service\base\base.service.js:374:29
      at custExecuteCb (C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\node_modules\oracledb\lib\connection.js:182:7) ]

谁能给我一个启发?

我想您在这行代码中遇到了错误: TranslateSingleton.load(lang, false, null);

这里你基本上传递了 null 作为 callback 参数的参数。

在第 callback('OK', null) 行的函数体内,它会尝试调用或调用您作为回调参数传递的函数。由于您的参数是 null,它无法调用,因为 null 不是函数,因此它会抛出错误。

通过执行以下步骤解决了这个问题:

1) 更改了调用函数

TranslateSingleton.load(lang, false, (a, b) => { });

2) 更改了根目录的路径(仅适用于开发实例)

珠三角 -> ./
开发 -> ./../