代码之家  ›  专栏  ›  技术社区  ›  Reed

将订阅结果作为承诺返回

  •  1
  • Reed  · 技术社区  · 6 年前

    return new Promise...

    error TS2322: Type '{}' is not assignable to type 'UserPurchasedPlan[]'. Property 'includes' is missing in type '{}'.

    下面是我尝试的代码。在Angular5.2和CLI版本1.6.8中工作。

    export class LicensesComponent implements OnInit {
    
      constructor(private _paymentService: PaymentService) { }
    
      purchasedPlans: UserPurchasedPlan[] = [];
    
      async GetPurchasedPlans(): Promise<UserPurchasedPlan[]> {
        return new Promise((resolve, reject) => {
          const sub = this._paymentService.GetPurchasedPlans().subscribe(
            response => {
              resolve(response);
              sub.unsubscribe();
            },
            err => {
              reject(err);
              sub.unsubscribe();
            }
          );
        });
      }
    
      ngOnInit() {
        this.GetPurchasedPlans().then(
          plans => {
            this.purchasedPlans = plans;
          }
        );
      }
    
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Korfoo    6 年前

    把它转换成 Observable this._paymentService.GetPurchasedPlans() 给一个 Promise 具有 toPromise() 然后你可以改变 ngOnInit() 致:

    ngOnInit() {
      this.GetPurchasedPlans().toPromise().then(
        plans => {
          this.purchasedPlans = plans;
        }
      ).catch((err) => console.log('Error: %s', err));
    }
    

    全班同学:

    export class LicensesComponent implements OnInit {
    
      constructor(private _paymentService: PaymentService) { }
    
      purchasedPlans: UserPurchasedPlan[] = [];
    
      ngOnInit() {
        this._paymentService.GetPurchasedPlans().toPromise().then(
          plans => {
            this.purchasedPlans = plans;
          }
        ).catch((err) => console.log('Error: %s', err));
      }
    }
    
        2
  •  0
  •   Ilyas karim    6 年前

    你可以这样做:

    async GetPurchasedPlans(): Promise<UserPurchasedPlan[]> {
      return this._paymentService.GetPurchasedPlans()
        .pipe( 
            map((response) => {  // <- Import this map from 'rxjs/operators'
                const mappedResponse: UserPurchasedPlan[] = [] // <- Here you need to map your response to UserPurchasedPlan[]
                return mappedResponse;
            })
        ).ToPromise();
    }