Angular Ionic HTTP承诺无法正常工作

时间:2019-02-26 11:42:52

标签: angular typescript ionic-framework angular-http

我有一个获取端点数据的服务:

Service.ts

  getAllProducts(){
    return new Promise( (resolve, reject) => {
      this.apiService.get( this.allProducts, `/products`, {} )
        .then( data => resolve( data.map( item => this.parseProductDetails( item ) ) ) )
        .catch( err => reject( err ) );
    } );
  }

console.log(data)-提供所有产品。一切正常,并且功能this.parseProductDetails还会正常返回所有产品。

但是当我从component调用时:

ionViwDidLoad(){
  this.productProvider.getAllProducts()
          .then( () => {
            items => this.items = items; 
            console.log('All products', this.items)
          }  )
          .catch( err => console.debug( 'products not found', err ) )
}

console.log('All products', this.items)-控制台日志中没有返回任何内容,甚至没有未定义或“所有产品”文本。

此代码有什么问题,我需要更改哪些内容才能检索组件中的信息?

parseProductDetails(item):

protected parseProductDetails( data: any ): Object {
    let parsed: any = data;

    try {
      parsed.dimensions = JSON.parse( data.dimensions );
    } catch( e ) { parsed.dimensions = []; }

    if( data.price )
      parsed.priceFormatted = this.formatPrice( data.price, data.currency );
    else
      parsed.priceFormatted = false;

    if( data.delivery )
      parsed.deliveryFormatted = this.formatPrice( data.delivery, data.currency );
    else
      parsed.deliveryFormatted = false;

    if( data.stock )
      parsed.stockFormatted = this.formatStock( data.stock, data.stockUnit );
    else
      parsed.stockFormatted = false;

    return parsed;
  }

返回已解析的数组。

3 个答案:

答案 0 :(得分:0)

关于promise的问题然后进行回调:

this.productProvider.getAllProducts()
      .then((items) => {
        console.log('All products', items)
      }  )
      .catch( err => console.debug( 'products not found', err ) )
      .then( () => loading.dismiss() );

答案 1 :(得分:0)

您正在then()中使用两个箭头功能。您应该删除一个。

ionViwDidLoad(){
  this.productProvider.getAllProducts()
          .then( (items) => {
            this.items = items; 
            console.log('All products', this.items)
          })
          .catch( err => console.debug( 'products not found', err ) )
          .then( () => loading.dismiss() );
}

答案 2 :(得分:0)

这里似乎出了很多问题。我不知道确切的原因是什么,但是我猜items参数没有正确放置。试试这个:

getAllProducts() {
  return this.apiService.get(this.allProducts, `/products`, {}).then((data) => { 
    console.log('items', data);
    return data.map((item) => this.parseProductDetails(item))
  });
}

您打来的电话如下:

ionViwDidLoad(){
  this.productProvider.getAllProducts()
    .then((items) => {
      this.items = items;
      console.log('All products', this.items)
    })
    .catch((err) => console.debug( 'products not found', err ))
    .then(() => loading.dismiss());
}