【问题标题】:Property 'catch' does not exist on type 'PromiseLike<void>类型“PromiseLike<void>”上不存在属性“catch”
【发布时间】:2018-07-17 06:51:33
【问题描述】:

我在以下代码中收到此错误。我正在使用 ionic3:

“PromiseLike”类型上不存在属性“catch”

这是我关注的tutorial 的链接。

VS Code 中显示此错误。

这可能是一些我不知道的更新语法

 storetoken(t) {
  this.afd.list(this.firestore).push({
  uid: firebase.auth().currentUser.uid,
  devtoken: t

}).then(() => {
  alert('Token stored');
  })
  .catch(() => {
    alert('Token not stored');
  })

this.afd.list(this.firemsg).push({
  sendername: 'vivek',
  message: 'hello'
}).then(() => {
  alert('Message stored');
  })
  .catch(() => {
    alert('Message not stored');
 })  
}

**这是将令牌发送到 firebase 数据库的 home.ts 文件的完整代码:请同时参考,因为我还收到另一个错误:错误:未捕获(承诺):错误:StaticInjectorError [ AngularFireDatabase] 当我删除 catch 块时。 **

 import { Component } from '@angular/core';
 import { NavController } from 'ionic-angular';
 import { AngularFireDatabase } from 'angularfire2/database';

 import firebase from 'firebase';
  import { HttpClientModule } from '@angular/common/http';
  import { HttpModule } from '@angular/http';

 declare var FCMPlugin;
 @Component({
   selector: 'page-home',
   templateUrl: 'home.html'
  })
 export class HomePage {
  firestore = firebase.database().ref('/pushtokens');
  firemsg = firebase.database().ref('/messages');
  constructor(public navCtrl: NavController, public afd: 
  AngularFireDatabase) {
  this.tokensetup().then((token) => {
  this.storetoken(token);
  })
  }

 ionViewDidLoad() {
 FCMPlugin.onNotification(function(data){
 if(data.wasTapped){
  //Notification was received on device tray and tapped by the user.
  alert( JSON.stringify(data) );
  }else{
  //Notification was received in foreground. Maybe the user needs to be 
   notified.
   alert( JSON.stringify(data) );
   }
  });

  FCMPlugin.onTokenRefresh(function(token){
  alert( token );
  });    
  }

  tokensetup() {
  var promise = new Promise((resolve, reject) => {
  FCMPlugin.getToken(function(token){
  resolve(token);
  }, (err) => {
    reject(err);
  });
  })
  return promise;
  }

  storetoken(t) {
  this.afd.list(this.firestore).push({
  uid: firebase.auth().currentUser.uid,
  devtoken: t

   }).then(() => {
   alert('Token stored');
   }).catch(() => {
    alert('Token not stored');
   })

  this.afd.list(this.firemsg).push({
  sendername: 'vivek',
  message: 'hello'
  }).then(() => {
  alert('Message stored');
  }).catch(() => {
    alert('Message not stored');
  })  
  }

  }

【问题讨论】:

  • 这主要是 Angular 问题,而不是 Ionic。
  • @estus 不是真的,它是一个 firebase/angularfire2 怪癖

标签: firebase ionic-framework ionic2 ionic3 angularfire2


【解决方案1】:

push 返回 ThenableReference 而不是 Promise

结合了承诺和参考;写入完成时解析,但可以立即用作对子位置的引用。

这意味着您可以将其用作写入数据的未来参考。

另见codebase。 ThenableReference Def here.

 export interface ThenableReference extends Reference, PromiseLike<Reference> {}

或者您可以按照推荐的方式进行,即: 目前不能使用 catch。

 this.afd.list(this.firestore).push({ uid: firebase.auth().currentUser.uid, devtoken: t });

注意:如果您想关注它,有一个未解决的问题here

【讨论】:

  • 感谢 Suraj 的回复。我已经对代码进行了建议的编辑。现在我收到一个新错误:“预期有 1 个参数,但得到了 0。”在行中 let myNewIdRef = this.afd.list(this.firestore).push();
  • 那么我想你不能抓住.. this.afd.list(this.firestore).push({ uid: firebase.auth().currentUser.uid, devtoken: t }).. 可能是 angularFire2 中的问题
  • 关于不使用 catch。我收到 Error: Uncaught (in promise): Error: StaticInjectorError[AngularFireDatabase]: 并且在使用它时,我们又回到了同样的错误。类型“PromiseLike”上不存在属性“catch”
  • 认为这是一个不同的错误,。您是否在导入中设置了 AngularFireDatabaseModule?
  • 我已经编辑了问题并上传了整个代码。请参考。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2016-12-31
  • 2019-12-01
  • 2019-03-18
  • 2018-08-11
  • 2021-08-05
相关资源
最近更新 更多