2015-02-12 12 views
5

Promisfy नेवला को Bluebird का उपयोग, मैं एक Promise.map (अगर एक संदर्भ दस्तावेज़ मौजूद है/किसी और को देखने के लिए एक सरणी के माध्यम से पाशन के लिए अगर, और एक बनाने की एक श्रृंखला के साथ समारोह ..वादा ढूंढेंOneAsync variable = {"isfulfilled": false, "isRejected": false}?

findOneAsync के उत्पाद नियत है

for (i=0; i<items.length; i++) { 
    var existingItem = Models.Items.findOneAsync({ item: items[i] }); 
    console.log("existingItem : "); 
    console.log(JSON.stringify(existingItem)); 
    console.log("existingItem._id : " + existingItem._id); 

यहाँ एक लॉग है: एक चर करने के लिए है, तो निर्माण में एक नया दस्तावेज़ (मुख्य वादा) के लिए 'variable._id' आवंटित करने के लिए, कंसोल लॉग {"isFulfilled":false,"isRejected":false}

यहाँ एक टुकड़ा है :

existingItem : 
{"isFulfilled":false,"isRejected":false} 
existingItem._id : undefined 

क्यों existingItem चर Model.Item.findOneAsync के लिए लंबित किया जा सकता है ..?

+0

मैं तुम्हें 'variable._id' करने के लिए एक मान निर्दिष्ट नहीं दिख रहा। क्या हमें कल्पना करना चाहिए कि आपका कोड कैसा दिखता है? – JLRishe

उत्तर

4

आपका प्रश्न वास्तव में स्पष्ट नहीं है, लेकिन मेरा प्रश्न आपको होगा, existingItem क्यों इसे पुनर्प्राप्त करने के बाद लंबित होगा।

क्या आप समझते हैं कि वादे का उपयोग कैसे करें?

var existingItem = Models.Items.findOneAsync({ item: items[i] }); 
existingItem.then(function (value) { 
    console.log("existingItem : "); 
    console.log(JSON.stringify(existingItem)); 
    console.log(JSON.stringify(value);); 
    console.log("existingItem._id : " + existingItem._id); 
}); 
+0

सूचक की सराहना करें। यहां यह कहां स्थित है: https://stackoverflow.com/questions/28482021/promise-map-not-finshing-because-subsequent-promise-join-finishes-first-promise – Stacks

0

मुझे लगता है कि आप चाहते हैं:

return Promise.each(items, function(item) { 
    return Models.Items.findOneAsync({item: item}).then(function(existingItem) { 
    console.log("existingItem", existingItem); 
    }); 
}); 
+0

क्या इससे बेहतर पैटर्न है: https://stackoverflow.com/questions/28482021/promise-map-not-finshing-because-subsequent-promise-join-finishes-first-promise – Stacks

0

findOneAsync() अभी तक जब बस खत्म नहीं हुआ चल अधिकांश समय आप अपने संकल्प लिया मूल्यों पर .then() या अन्य वादा हेरफेर कार्यों का उपयोग कर प्राप्त करने की आवश्यकता आप console.logs लिखना शुरू करते हैं।

चीजों को भी जटिल बनाते हुए, ऐसा लगता है कि findOneAsync() एक वादा वापस कर रहा है (स्थिति न तो पूर्ण हो गई है और न ही उस बिंदु पर खारिज कर दी गई है जब आप लॉग लिख रहे हैं)।

तो अगर आप की दुकान और पाया आइटम प्रवेश करना चाहते हैं, तो आप

  1. प्रतीक्षा करने के लिए वादा अपने .then() fucntion, और
  2. का उपयोग करके हल करने के लिए से "हल हो पाया आइटम को पुनः प्राप्त की जरूरत है मूल्य "। findOneAsync() को मिली 0 ऑब्जेक्ट को अपने resolve() फ़ंक्शन (यानी findOneAsync() के अंदर कहीं भी पैरामीटर के रूप में पास किया जाना चाहिए: resolve(foundItem);)।

सब मानते हुए, यह काम करना चाहिए:

for (i=0; i<items.length; i++) { 
     var findPromise = Models.Items.findOneAsync({ item: items[i] }); 
     //the next line won't run until findOneAsync finishes 
     findPromise.then(resolveResult => { 
      var existingItem = resolveResult; 
      console.log("existingItem : "); 
      console.log(JSON.stringify(existingItem)); 
      console.log("existingItem._id : " + existingItem._id); 
     } 
    } 
संबंधित मुद्दे