2013-06-01 12 views
5

मैं नेवला अद्यतन फोन है और ... एक अतिरिक्त पैरामीटर पारित करने के लिए तो जैसे चाहते हैं के लिए एक अतिरिक्त पैरामीटर पारित करने के लिए यह संभव है:एक नेवला अद्यतन कॉलबैक

isLoopOver

UserInfo.update({_id: userInfo._id}, {'value': someval}, function(err, numAffected, isLoopOver) { 
    console.log('IsLoopOver ' + JSON.stringify(isLoopOver)); 
    if (isLoopOver){ 
     doSomething(isLoopOver); 
    } 
}); 
पारित करने के लिए कोशिश कर रहा है

ऊपर की कोशिश की, लेकिन मैं एक वस्तु (कॉलबैक अंदर) मिलता है नीचे के रूप में:

{"updatedExisting":true,"n":1,"connectionId":117,"err":null,"ok":1} 

कोई विचार क्यों यह मोंगो से स्थिति दिखा रहा है।

प्रश्न: मैं कॉलबैक के माध्यम से अतिरिक्त पैरामीटर कैसे पास कर सकता हूं?

+0

क्या आप इसे अपने userInfo ऑब्जेक्ट पर ले जा सकते हैं? –

उत्तर

6

आम तरीका है:

var isLoopOver = false; 
UserInfo.update({_id: userInfo._id}, {'value': someval}, function(err, numAffected) { 
    console.log('IsLoopOver ' + JSON.stringify(isLoopOver)); 
    if (isLoopOver){ 
     doSomething(isLoopOver); 
    } 
}); 

यदि आप चिंतित हैं, तो के बारे में कुछ कोड से पहले update के कॉलबैक फ़ंक्शन से किया जा रहा isLoopOver का मूल्य बदल जाएगा कहा जाता है, निम्नलिखित कोड का उपयोग कर:

(function (isLoopOver) { 
    UserInfo.update({_id: userInfo._id}, {'value': someval}, function(err, numAffected) { 
     console.log('IsLoopOver ' + JSON.stringify(isLoopOver)); 
     if (isLoopOver){ 
      doSomething(isLoopOver); 
     } 
    }); 
}(isLoopOver)); 

कारण है कि आपका isLoopOver चर मॉन्गो से स्थिति दिखा रहा है कि कॉलबैक फ़ंक्शन में, isLoopOver वास्तविक पैरामीटर के बजाय औपचारिक पैरामीटर है।

+0

धन्यवाद लुइन - अच्छा लग रहा है। –

+0

अगर मैं 'कार्य करता हूं तो एक (paramw) { var isLoopOver = paramw; UserInfo.update ({_ id: userInfo._id}, {'value': someval}, फ़ंक्शन (त्रुटि, numAffected) { console.log ('IsLoopOver' + JSON.stringify (isLoopOver)); यदि (isLoopOver) है { doSomething (isLoopOver); } }); } एक (झूठा); ' क्या मुझे चिंता करनी होगी कि कॉलबैक दिए गए पैरामीटर के नए मान का उपयोग करेगा यदि मैं पहले कॉल के कॉलबैक को हल करने से पहले फ़ंक्शन को दोबारा कॉल करता हूं? एक (झूठा); क्या कॉलबैक से जुड़ा कॉलबैक भी झूठ बोलता है, कॉलबैक लागू होने से पहले एक (सत्य) कहा जाता है? @RamIyer – Morrisda

+0

@ मॉरिसडा नहीं, आपको इसके बारे में चिंता करने की ज़रूरत नहीं है। 'पैरा' का मान फ़ंक्शन के अंदर नहीं बदलेगा। – luin

5

आप उपयोग कर सकते हैं अंडरस्कोर के partial function:

UserInfo.update(..., _.partial(function(isLoopOver, err, numAffected) { 
}, isLoopOver)) 
+0

या [Function.bind] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Partial_Functions)। – robertklep