Возвращаемое значение из подписки в Ionic - PullRequest
0 голосов
/ 08 октября 2019

Итак, я хочу вернуть значение из функции подписки следующим образом:

async obtenerListadoClases(categoria) {

  var clasesDB = await this.getClases(categoria)
      .subscribe((data: any) => {
         clasesDB = data.clasesDB // **Want to return this**
         console.log(clasesDB,'clasesDB'); // **Getting Value**
      })

      console.log(clasesDB, 'outside'); // **Not Getting Value**
      return clasesDB;
  }

Кроме того, я хочу использовать эту функцию в другом месте, например:

 var listaClases = await this.claseServicio.obtenerListadoClases(categoria); // Not getting the correct info
  //  console.log(listaClases , 'listado clases');

ЧтоЯ делаю не так? Или как я могу это исправить? Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вы можете подписаться только на наблюдаемые .

Наблюдаемый путь

getClases(categoria): Observable<any> {
  return new Observable(observer => {
    // logic to return data
    observer.next(data);
    observer.complete()
    // logic when error
    observer.error(error);
  });
}

Возврат функции getClases ()

obtenerListadoClases(categoria): Observable<any>{
  return this.getClases(categoria);
}

Используйте нужную функцию:

this.obtenerListadoClases(categoria)
 .subscribe(
   result => {
     // what you want to do with the result
   },
   error => {
     // what you want to do with the error
   }); 

Способ Promise

getClases(categoria): Promise<any> {
  return new Observable((resolve, reject) => {
    // logic to return data
    resolve(data);
    // logic when error
    reject(error);
  });
}

Возврат функции getClases ()

obtenerListadoClases(categoria): Promise<any>{
  return this.getClases(categoria);
}

Используйте функцию, где вы хотите:

this.obtenerListadoClases(categoria)
 .then(result => {
   // what you want to do with the result
 })
 .catch(error => {
   // what you want to do with the error
 }); 
0 голосов
/ 08 октября 2019

Вы должны использовать обещания с .subscribe(). Только наблюдаемые используют .subcribe()

Кроме того, держитесь подальше от обещаний в мире углов. Время думать реактивно.

Является ли это возвращением наблюдаемого? this.getClases(categoria) отправьте код пожалуйста.

...