Angular - Map / Catch返回相同的值但收到错误

时间:2018-05-29 01:13:00

标签: javascript angular typescript

基本上,我有以下代码:

let currentTime:number = (new Date()).getTime();
return this.authenticationService.login(credential).map(data => {
  const token = data.token;
  const id = data.id;
  sessionStorage.setItem('userData', JSON.stringify({currentTime, token, id}));
  return JSON.parse(sessionStorage.getItem('userData'));
}).catch(error => {
  sessionStorage.setItem('userData', JSON.stringify({currentTime, error}));
  return JSON.parse(sessionStorage.getItem('userData'));
});

如您所见,mapcatch方法返回相同的代码。当我使用return方法到达map语句时,所有内容都按预期运行。但当我到达return部分的catch时,Angular说:core.js:1598 ERROR TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.。为什么会这样?

1 个答案:

答案 0 :(得分:1)

根据错误消息的建议,您应该返回一个承诺或一个可观察的......

}).catch(error => {
  sessionStorage.setItem('userData', JSON.stringify({currentTime, error}));
  return Observable.of(JSON.parse(sessionStorage.getItem('userData')));
});