物业&#39; catch&#39;类型&#39; PromiseLike <void>上不存在

时间:2018-02-07 04:31:04

标签: firebase ionic-framework ionic2 ionic3 angularfire2

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

  

财产&#39; catch&#39;类型&#39; PromiseLike

上不存在

这是我关注的tutorial的链接。

此错误显示在VS代码中。

这可能是一些我不知道

的更新语法
 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');
 })  
}

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

 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');
  })  
  }

  }

1 个答案:

答案 0 :(得分:0)

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