Angular Promise .then() возвращает значение

bbb(){
    return new Promise((resolve, reject) => {
      this.http.get(this.url).subscribe(data => {
          resolve(data)
        },
         error => {
          reject(error);
        },
      );
    });
  }

ngAfterContentInit(){
    console.info(//THIS LINE
      this.bbb().then(son => {
      return son;
    }));
  }

-Эта строка- вернуть ZoneAwarePromise в консоль. Как я могу вернуть значение сына?

Но лучше всего научиться работать с Observables.

Heretic Monkey 07.06.2019 23:43

какова ваша цель?

Jota.Toledo 08.06.2019 00:03

@Jota.Toledo Я хочу получить значения широты и долготы из своего API. После получения операции я хочу использовать эту переменную в другой функции для создания значка карты.

OSentrk 08.06.2019 00:06
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
3
15 540
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Лучше использовать Observable:

import { catchError } from 'rxjs/operators';
import { throwError } from 'rxjs';

bbb() {
 return this.http.get(this.url)
   .pipe(
     catchError(err => {
       console.info('err', err);
       return throwError('Something bad happened; please try again later.');
     });
}

А затем просто подпишитесь на bbb:

import { Subscription } from 'rxjs';

testSubscription: Subscription;

ngAfterContentInit() {
    this.testSubscription = this.bbb()
      .subscribe(son => {
        console.info('son', son); // here you get the result
      });
}

Не забудьте unsubscribe:

ngOnDestroy() {
  this.testSubscription.unsubscribe();
}

Если вы все еще хотите использовать Promise:

bbb() {
  return this.http.get(this.url).toPromise();
}

Чтобы получить результат bbb:

ngAfterContentInit() {
   this.bbb()
     .then(son => {
       console.info('son', son); // here you get the result
     })
     .catch(err => {
       console.info(err);
     });
}

Могу ли я получить доступ к переменной сына в любой функции? Потому что мне нужно создать значок карты на googlemaps.

OSentrk 08.06.2019 00:04

Вы получите son асинхронно (через некоторое время)... поэтому, если вы хотите использовать его в какой-либо функции, вызовите эту функцию после того, как получите результат (внутри обратного вызова subscription или than)

Vadi 08.06.2019 00:08

Хорошо, что вы упоминаете наблюдаемый способ, но (1) catchError должен возвращать Observable и (2) суффикс $ обычно используется только для Observables, но не для подписок.

frido 08.06.2019 01:34

@fridoo хорошее замечание! исправил эту часть

Vadi 08.06.2019 01:46

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