Ionic3-Property'cat'在'PromiseLike <void>'类型中不存在

时间:2018-04-11 10:19:02

标签: angular ionic-framework ionic3 angularfire2

如何在ionic3中解决这些问题Property 'catch' does not exist on type 'PromiseLike<void>'.

这里我添加了代码

adduser(newuser) {
var promise = new Promise((resolve, reject) => {
  this.afireauth.auth.createUserWithEmailAndPassword(newuser.email, 
newuser.password).then(() => {
    this.afireauth.auth.currentUser.updateProfile({
      displayName: newuser.displayName,
      photoURL: ''
    }).then(() => {
      this.firedata.child(this.afireauth.auth.currentUser.uid)({
        uid: this.afireauth.auth.currentUser.uid,
        displayName: newuser.displayName,
        photoURL: 'give a dummy placeholder url here'
      }).then(() => {
        resolve({ success: true });
        }).catch((err) => {
          reject(err);
      })
      }).catch((err) => {
        reject(err);
    })
  }).catch((err) => {
    reject(err);
  })
})
return promise;
}

我不知道如何解决问题??

当我运行ionic serve时,它可以正常运行

但是当我运行ionic cordova run android时,它会显示以下问题Property 'catch' does not exist on type 'PromiseLike<void>'.

2 个答案:

答案 0 :(得分:1)

我通过添加push()和set方法

解决了这个问题

答案 1 :(得分:0)

类似Prom的对象(thenables)可能没有catch方法,这就是错误所说的内容。他们需要转换为Promise.resolve的承诺才能被用作通常的承诺。请注意,catch是第二个then参数的语法糖,而且thenable可以单独与then一起使用,但方法结果仍应转换为promise。

代码使用promise构造反模式。一旦有承诺,就不需要使用new Promise

adduser(newuser) {
  returnPromise.resolve(this.afireauth.auth.createUserWithEmailAndPassword(newuser.email, 
newuser.password)).then(() => { return Promise.resolve(...) });
}

这对async..await的效果更好,因为它会自然地将结果转换为承诺:

async adduser(newuser) {
  await this.afireauth.auth.createUserWithEmailAndPassword(newuser.email, 
newuser.password);
  await this.afireauth.auth.currentUser.updateProfile(...);
  await this.firedata.child(this.afireauth.auth.currentUser.uid).set(...);
  return { success: true };
}