2013-06-01 16 views
5

mam wezwanie aktualizacji Mongoose i chciałby przekazać dodatkowy parametr ... tak:Czy to możliwe, aby przejść dodatkowy parametr do wywołania zwrotnego aktualizacji mangusta

stara się przekazać isLoopOver

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

Próbowaliśmy powyżej, ale pojawia się obiektu (wewnątrz zwrotnego) jak poniżej:

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

Nie mam pojęcia, dlaczego to jest pokazujący stan z Mongo.

Pytanie: Jak mogę przekazać dodatkowy parametr przez wywołanie zwrotne?

+0

Czy możesz umieścić go na swoim obiekcie userInfo? –

Odpowiedz

6

Wspólna droga jest:

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

Jeśli martwisz się o jakiś kod zmieni wartość isLoopOver przed update „s funkcja zwrotna samopoczucia wywoływany przy użyciu następującego kodu:

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

Powodem, dla którego zmienna isLoopOver pokazuje status z mongo, jest to, że w funkcji wywołania zwrotnego, isLoopOver jest parametrem formalnym, a nie faktycznym parametrem.

+0

Dziękuję Luin - wygląda dobrze. –

+0

Co jeśli wykonam 'function a (paramw) { var isLoopOver = paramw; UserInfo.update ({_ id: userInfo.id}, {'value': anyval}, function (err, numAffected) { console.log ('IsLoopOver' + JSON.stringify (isLoopOver)); if (isLoopOver) { doCoshing (isLoopOver); } }); } } a (fałsz); ' Czy muszę się martwić, że funkcja oddzwaniania użyje nowej wartości danego parametru, jeśli ponownie zadzwonię do tej funkcji, zanim zostanie rozwiązane pierwsze połączenie zwrotne? a (fałsz); czy wywołanie zwrotne wywoływane z tego działania przyjmuje również wartość false (prawda), jest wywoływane przed wywołaniem wywołania zwrotnego? @RamIyer – Morrisda

+0

@Morrisda Nie, nie musisz się o to martwić. Wartość 'params' nie zmieni się wewnątrz funkcji. – luin

5

Można użyć Podkreślenie na partial function:

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

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

Powiązane problemy