Невозможно вызвать любую функцию внутри функции / обещания - PullRequest
0 голосов
/ 13 января 2019
playAudio(index){

   storageRef.getDownloadURL().then(onResolve, onReject);

   function onResolve() {
     storageRef.getDownloadURL().then(function(url) {
       console.log(url);
       sMedia.playAudio(url);
     })
     console.log("File found!")
   }

   function onReject() {
     this.presentAlert();  /* <---- This is the problem */
     console.log("File don't exist.")
   }

presentAlert() {
   let alert = this.alertCtrl.create({
     title: 'Ops!',
     subTitle: "No file for this search",
     buttons: ['OK']
   });
   alert.present();
}

Кажется, этот код работает. Если файл существует в Firebase, то функция onResolve () работает нормально. Вместо этого, если файл не существует, отображается журнал консоли, но функция не выполняется.

Это потому, что функция presentAlert () невидима внутри функции onReject (). Зачем? Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 13 января 2019

Мой инстинкт инстинкт говорит, что дело в ссылке this. Попробуйте код без this и / или используйте функции стрелок, чтобы сохранить его привязку. Например. (встроенными методами)

storageRef.getDownloadURL().then(() => {
  storageRef.getDownloadURL().then(function(url) {
    console.log(url);
    sMedia.playAudio(url);
    })
  console.log("File found!");
}).catch((e) => {
  this.presentAlert();  /* <---- >this< is the problem */
  console.log("File don't exist.")
});


function presentAlert() {
  let alert = this.alertCtrl.create({
    title: 'Ops!',
    subTitle: "No file for this search!",
    buttons: ['OK']
  });
  alert.present();
}

https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...