【问题标题】:Async service call not working异步服务调用不起作用
【发布时间】:2016-01-07 13:36:42
【问题描述】:

这是我的 index.js

import ProductDetailController from './product-detail.controller.js';
import ProductDetailManager from './product-detail.manager.js';
import ProductDetailService from './../services/product-detail.service.js';

export default angular.module('myApp.productDetail', [uirouter])
    .controller('ProductDetailController', ProductDetailController)
    .service('productDetailManager', ProductDetailManager)
    .service('productDetailService', ProductDetailService)        
    .name;

这是我的控制器

export default class ProductDetailController {
    constructor( logger, productDetailManager, $stateParams) {

        this.productDetailManager = productDetailManager;            
        this.activate();
    }

    activate() {
        return this.loadProduct(this.$stateParams.boutiqueId,this.$stateParams.productId).then(()=> {

        });
    }

    loadProduct(boutiqueId, productId) {
        //async
        return this.productDetailManager.getProduct(boutiqueId, productId).then((response)=> {
            return this.response;
        });
    }
}

ProductDetailController.$inject = [ 'logger', 'productDetailManager', '$stateParams'];

这是我的经理

export default class ProductDetailManager {
    constructor( logger, productDetailService) {

        this.productDetailService = productDetailService;
        this.logger = logger;

    }

    getProduct(boutiqueId, productId) {
        //async
        return this.productDetailService.find(boutiqueId, productId).then((response)=> {
            console.log(this.response);
            return this.response;
        });
    }
}

ProductDetailManager.$inject = [ 'logger', 'productDetailService'];

这是我的服务

export default class ProductDetailService {

    constructor($http, $q, logger, configurationService) {
        this.$http = $http;
        this.$q = $q;
        this.logger = logger;
        this.configurationService = configurationService;
        this.basePath = this.configurationService.get('catalogApiBasePath');
    }


    find(boutiqueId, productId) {


        var deferred = this.$q.defer();

        this.$http.defaults.headers.common.Authorization = 'Bearer ---';
        this.$http.defaults.headers.common.X_AUTH_VERSION = '---';

        this.$http.get(`${this.basePath}/product/detail?boutiqueId=${boutiqueId}&productId=${productId}`)

            .success((data, status, headers, config)=> {
                deferred.resolve(data);
            })
            .error((data, status) => {
                this.logger.error('XHR Failed for ProductDetailService#find.' + data);
                deferred.reject(data);
            });

        return deferred.promise;
    }
}

ProductDetailService.$inject = ['$http', '$q', 'logger', 'configurationService'];

我想更改经理上的服务数据,然后返回到控制器,但是经理正在获取未定义的数据。

我在异步调用方面做错了,在这里找不到我缺少的东西

【问题讨论】:

    标签: javascript angularjs ecmascript-6


    【解决方案1】:

    我猜错误在这里:

     return this.productDetailService.find(boutiqueId, productId).then((response) => {
         console.log(this.response); // here should be just `response` as it is argument
         return this.response;
     });
    

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 2022-06-14
      • 1970-01-01
      • 2017-03-29
      • 2017-08-20
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多