使用Angular 6中的Observable捕获Promise拒绝错误

问题描述 投票:1回答:1

我一直在试图对包含Promise的Observable处理错误进行单元测试,而我似乎无法让它捕获错误。 我正在建立一个只会拒绝承诺的观察,然后我从间谍那里返回。这适用于正确解决的承诺,但在拒绝时,我收到错误:'错误:未捕获(在承诺中):错误'

我的代码:

   it(
  'should not change status if unsucessful',
  fakeAsync(() => {

    const obs = from(
      new Promise(resolve => {
        return Promise.reject('error');
      })).pipe(catchError( (error) => {
        console.log('oh no');
        return of(error);
      }));

    spyOn(
      mockService,
      'ChangeStatusToAvailable'
    ).and.returnValue(obs);
    component.SetStatusToAvailable();
    tick(200);
    fixture.detectChanges();
    console.log(component._status);
    expect(component._status).toBe(AgentStatus[AgentStatus.disconnected]);
  })
);

谢谢您的帮助!

javascript angular promise rxjs observable
1个回答
1
投票

你的Promise构建错误。

MDN

执行者 使用参数resolve和reject传递的函数。执行函数由Promise实现立即执行,传递resolve和reject函数(在Promise构造函数甚至返回创建的对象之前调用执行程序)。 ...忽略执行程序的返回值。

在任何情况下,您都不需要手动构建承诺(这实际上是反模式)。尝试:

const obs = from(Promise.reject('error'))
© www.soinside.com 2019 - 2024. All rights reserved.