我的一个文件中有一个函数,用户可以使用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包围它,并且该方法不起作用,因为它在第一种情况下会失败,并且不会打扰第二种情况。
本质上,我希望它检查带有book
和author
的路径是否存在。如果不是,则默认为author
路径。
答案 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;
}
}