等待Callback和我们的结果数据从该函数中取出另一个进程

时间:2016-09-26 15:45:37

标签: javascript callback promise

我有这个课程(产品)。

        var Product = function () {
        this.products = [];
        this.priceFrom = null;
        this.priceTo = null;
        this.countDone = 0;
    };
    Product.prototype = {
        constructor: Product,

        getProductsByPriceRange: function (priceFrom, priceTo) {
            var xhrUrl = "<?= base_url('market/products/xhr_product_price_range') ?>";
            var xhrData = {price_from: priceFrom, price_to: priceTo};
            var xhrType = "json";

            var UtilsClass = new Utils();
            UtilsClass.xhrConnection(xhrUrl, xhrData, xhrType, function (data) {
                /* MY DATA IS HERE */
            });

        },

        buildList:function (products) {
            for (var i = 0; i < products.length; i++) {
                var product = products[i];
                console.log("product");
            }
        },

        buildOne: function (product) {

        }
    };

    /*....more classes */

另一段代码(产品类之外):

var fromPrice = data.from;
                var toPrice = data.to;

                var ProductClass = new Product();

                var lastCountDone = ProductClass.countDone;

                ProductClass.priceFrom = fromPrice;
                ProductClass.priceTo = toPrice;
                var myProducts = ProductClass.getProductsByPriceRange(ProductClass.priceFrom, ProductClass.priceTo);

我的问题是......我可以等待UtilsClass.xhrConnection的回调(在第一部分中)并在第二段代码中使用生成的回调数据(第一部分)。

任何想法都对我很有价值。谢谢!

1 个答案:

答案 0 :(得分:1)

var Product = function () {
    this.products = [];
    this.priceFrom = null;
    this.priceTo = null;
    this.countDone = 0;
};
Product.prototype = {
    constructor: Product,

    getProductsByPriceRange: function (priceFrom, priceTo) {
        var xhrUrl = "<?= base_url('market/products/xhr_product_price_range') ?>";
        var xhrData = {price_from: priceFrom, price_to: priceTo};
        var xhrType = "json";

        var UtilsClass = new Utils();
        return new Promise(function(resolve, reject){
            UtilsClass.xhrConnection(xhrUrl, xhrData, xhrType, function (data) {
            /* MY DATA IS HERE */
                resolve(data)
             });

        });

    },

    buildList:function (products) {
        for (var i = 0; i < products.length; i++) {
            var product = products[i];
            console.log("product");
        }
    },

    buildOne: function (product) {

    }
};

打电话时,

var fromPrice = data.from;
            var toPrice = data.to;

            var ProductClass = new Product();

            var lastCountDone = ProductClass.countDone;

            ProductClass.priceFrom = fromPrice;
            ProductClass.priceTo = toPrice;
            var myProducts = ProductClass.getProductsByPriceRange(ProductClass.priceFrom, ProductClass.priceTo).then(function(data){%your data will be available here%});