2015-03-20 4 views
6

मैं सेल जेएस में एक सेवा बना रहा हूं। मैं इसे वापस करने से पहले कुल गणना का मूल्य अपडेट करना चाहता हूं। लेकिन समस्या तब होती है जब वापसी async.series के कॉलबैक में होती है जब मैं इसे आमंत्रित कर रहा हूं तो मुझे एक अपरिभाषित हो रहा है। मुझे यह कैसे करना चाहिए?सेल जेएस: सेवा से मूल्य वापस कैसे करें

var totalCount = 0; 

    async.series([ 
     function getProducts(cb_series){ 
      Inventory.find({sku_id : sku_id, bay_id : bay_id}) 
       .then(function(inventory_items){ 

        async.each(inventory_items, function(item, cb_each){ 
         totalCount = totalCount + item.physical_count; 
         cb_each(); 
        }, function(err){ 
         if(err) 
          console.log(err); 

         cb_series(); 
        });    
       }); 
     } 
    ], function returnResult(err, cb){ 
     if(err) 
      console.log(err); 

     return totalCount; 
    }); 
+0

WTH आप 'एक तुल्यकालिक योग के लिए async.each' उपयोग कर रहे हैं? – Bergi

+0

क्योंकि एक खोज का परिणाम एक सरणी है। यह 1 से अधिक उदाहरण लौटाएगा जो मेरे मानदंडों से मेल खाता है और मैं उन सभी को जोड़ रहा हूं इसलिए मैं प्रत्येक –

+0

हां एसिंक का उपयोग कर रहा हूं, 'inventory_items' एक सरणी है। लेकिन आप इसे 'लूप' के साथ लूप कर सकते हैं, 'async' की आवश्यकता नहीं है? – Bergi

उत्तर

7

मुझे पूरा यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं। लेकिन आप शायद इस तरह एक कॉलबैक में TOTALCOUNT बाहर पास करना चाहते हैं:

function getProducts(callback){ 
    Inventory.find({sku_id : sku_id, bay_id : bay_id}).then(
     function(inventory_items){ 
      callback(null, inventory_items.length) 
     }, function(err){ 
      console.log(err); 
      callback(err); 
     }); 
} 

है कि कोई त्रुटि है, इसे वापस त्रुटि के साथ के रूप में यह पहले पैरामीटर है कहते हैं, ताकि पर एक अशक्त जांच करेंगे। यदि पहला पैरामीटर शून्य है, तो दूसरा पैरामीटर आपकी सरणी की लंबाई होगी।

आप बल्कि और उत्पादों के सभी न सिर्फ लंबाई वापसी चाहते हैं तो (के रूप में समारोह के नाम का तात्पर्य), तो यह बहुत ही इसी तरह की है:

function getProducts(callback){ 
    Inventory.find({sku_id : sku_id, bay_id : bay_id}).then(
     function(inventory_items){ 
      callback(null, inventory_items) 
     }, function(err){ 
      console.log(err); 
      callback(err); 
     }); 
} 

आप के लिए इस तरह उसका प्रयोग करेंगे पहला मामला:

getProducts(function(err, productCount) { 
    if(err) { 
     console.log(err); 
     return err; 
    } else { 
     var totalCount = productCount; 
    } 
    //etc etc... 
} 

... या दूसरे मामले के लिए यह:

getProducts(function(err,products) { 
    if(err) { 
     console.log(err); 
     return err; 
    } else { 
     var productArray = products; 
    } 
    //etc etc... 
} 
+0

बहुत बहुत धन्यवाद! यह काम किया। –

+0

क्या यह एकमात्र तरीका है? परिणाम "बॉक्स से बाहर" प्राप्त करने का कोई तरीका नहीं है? विश्वास नहीं कर सकता कि वहां नहीं है। –

+0

@patryk आपका क्या मतलब है "बॉक्स से बाहर"? –

संबंधित मुद्दे