TypeScript报错:PromiseLike<any>无catch属性,疑似AngularFire2问题
解答:这并非AngularFire2的Bug,是TypeScript类型限制导致的
这并不是AngularFire2的Bug哦,问题出在TypeScript对PromiseLike接口的定义上,我来给你拆解一下:
首先,this.afDb.list('/demo').push()返回的是PromiseLike<any>类型,而TypeScript中的PromiseLike接口只规定了then方法,并没有包含catch方法——catch是标准Promise接口才提供的链式方法。所以当你直接在后面链式调用.catch()时,TypeScript就会抛出类型错误。
两种解决方法:
方法一:利用
then的第二个参数处理错误
这是PromiseLike原生支持的错误处理方式,把错误回调放在then的第二个参数里即可:this.afDb.list('/demo').push({a: 'b'}) .then( _ => console.log('works'), err => console.log('err: ', err) );方法二:转换为标准
Promise后使用catch
如果更习惯链式catch的写法,可以用Promise.resolve()把PromiseLike包装成标准Promise:Promise.resolve(this.afDb.list('/demo').push({a: 'b'})) .then(_ => console.log('works')) .catch(err => console.log('err: ', err));
简单来说,AngularFire2返回PromiseLike是出于某些异步场景的设计考虑,并非Bug,只要调整错误处理的写法就能解决这个TypeScript提示啦。
内容的提问来源于stack exchange,提问作者flipcode
相关产品推荐
相关产品推荐

