typescript 如果router.navigate抛出错误,为什么Angular 代码不进入catch块?

zqdjd7g9  于 2023-03-04  发布在  TypeScript
关注(0)|答案(2)|浏览(151)
try {
    this._router.navigate([result?.data?.menuLink]);
    console.log('inside try block');
  } catch {
    this._router.navigate(['/dashboards/analytics']);
    console.log('inside catch block'); 
  }

try块中的router.navigate引发错误,因为该路径不存在,但它不会进入catch块。
我在控制台中收到以下错误:

core.mjs:6469 ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'config/payment'
sycxhyv7

sycxhyv71#

根据文档,该函数返回一个Promise。promise是异步的,这意味着当你试图捕捉错误时,错误还没有发生。相反,你可以在promise上使用.catch()函数。

this._router.navigate([result?.data?.menuLink])
  .catch(() => {
    this._router.navigate(['/dashboards/analytics']);
    console.log('inside catch block'); 
  })
bgtovc5b

bgtovc5b2#

只需要为捕捉承诺错误设置语法async await

constructor(private _router: Router) {
    this.catchRouteError()
  }
  async catchRouteError() {
    try {
     await this._router.navigate([result?.data?.menuLink]);
     console.log('inside try block');
   } catch {
     this._router.navigate(['/dashboards/analytics']);
     console.log('inside catch block'); 
   }
  }

但是,根据您的代码和描述,您可以设置一个特定的组件或使用重定向配置在您的路由器干净的代码

const routes: Routes = [
  {
    path: 'products',
    component: ProductsComponent
  },
  {
    path: 'cart',
    component: CartComponent
  },
  { path: '', redirectTo: '/products', pathMatch: 'full' },
  { path: '**', component: PageNotFoundComponent }
];

相关问题