2016-09-26 6 views
0

私はこのクラス(製品)を持っています。この関数から別の処理を行うためにコールバックと結果データを待ちます

 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のコールバックを待ってからの生成されたデータを使用することができますコードの第2部分のコールバック(最初の部分から)

私にとって非常に貴重なアイディアです。ありがとうございました!

+1

はありません、あなたは二枚で待たなければならないが、それを待っていることは、より快適になるように、あなたが最初のものから約束を返すことができます。 – Bergi

答えて

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%}); 
+1

'UtilsClass.xhrConnection'の中で' new Promise'を使うべきであるというメモを追加してください。 – Bergi

+0

ありがとうDrEarnest。 これは私が必要としていたものです。 –

関連する問題