周围的try catch块周围require关键字

时间:2019-06-03 17:13:56

标签: javascript node.js reactjs

我的一个文件中有一个函数,用户可以使用2个参数调用该函数。这些参数然后用于构造文件路径,如果该路径中存在文件,则应该获取该文件,否则应使用默认文件。

export const formImporter = (book, author) => {

  const importedFile = require(`../../chapter/page/${book}/${author}.jsx`).default
    || require(`../../chapter/page/common/${author}.jsx`).default;

  return importedFile; };

这些文件是功能性的React组件。问题是我不能用try catch包围它,并且该方法不起作用,因为它在第一种情况下会失败,并且不会打扰第二种情况。

本质上,我希望它检查带有bookauthor的路径是否存在。如果不是,则默认为author路径。

1 个答案:

答案 0 :(得分:1)

如果添加一个try/catch块,则finally方法应该可以正常工作。一个小片段来说明它如何工作:

let foo;
const bar = "bar";

const tryCatchFinally = ( foo, bar ) => {
  try {
    foo.someProperty; // will throw an error since foo is undefined
  }
  catch ( error ) {
    console.log( "oh no an error occurred" );
    console.error( error );
  }
  finally {
    console.log( "...but I continue to run anyway" );
    console.log( bar ); // error is caught, however I can still execute something
    
    return bar;
  }
}

tryCatchFinally( foo, bar );

所以在您的情况下,它可能看起来像这样:

let importedFile;
const formImporter = ( book, author ) => {
  try {
    importedFile = require(`../../chapter/page/${book}/${author}.jsx`).default
  }
  catch ( error ) {
    console.error( error );
  }
  finally {
    if ( !importedFile) {
      importedFile = require(`../../chapter/page/common/${author}.jsx`).default;
    }

    return importedFile;
  }
}