Ionic3-свойство 'catch' не существует для типа 'promiselike <void>'

Как решить эти проблемы с Property 'catch' does not exist on type 'PromiseLike<void>'. в ionic3

Здесь я добавил код

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>'.

Есть идеи? @Utpaul

vignesh 11.04.2018 12:20
0
1
289
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Обещающие объекты (thenables) могут не иметь метода catch, об этом говорит ошибка. Их нужно преобразовать в обещания с помощью Promise.resolve, чтобы использовать их как обычные обещания. Обратите внимание, что catch является синтаксическим сахаром для второго аргумента then, а затем таблицы можно использовать только с then, хотя результат метода все равно должен быть преобразован в обещание.

В коде используется антипаттерн построения обещаний. Если есть обещание, нет необходимости использовать 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 };
}

Я новичок в использовании этого ... Я не знаю, как это использовать?

vignesh 11.04.2018 14:58

Функция async должна использоваться, как предусмотрено. Некоторые аргументы метода были заменены на ... для удобства чтения.

Estus Flask 11.04.2018 15:08
Ответ принят как подходящий

Я решил эту проблему, добавив push () и установив метод

это здорово @vignesh

Utpaul 14.04.2018 11:37

Другие вопросы по теме