2016-03-26 7 views
0

Ich habe eine nodejs Funktion als mehrfach mit unterschiedlichen Werten von a und b unterWie erhalten Sie Parameter einer asynchronen Funktion, die einem Rückruf nach der Rückkehr in Node entspricht?

function sample(a, b) { 

    var params = { 
     a: a, 
     b: b 
    }; 

    myService.doMyJob(params, function(err, response) { 
     if (err) 
      //do something 

     //access params.a and params.b 

    }); 
} 

Diese Funktion wird aufgerufen gezeigt wird. Gibt es eine Möglichkeit, die Werte a und b entsprechend dem zurückgegebenen Callback zu erhalten?

ANMERKUNG: Logischerweise kann ich die Werte a und b nicht zusammen mit dem Erfolgsrückrufergebnis aus dem Service zurückgeben.

Antwort

0

sollte Ihr Code so funktionieren wie er ist. Die Callback-Funktion wird um das Objekt params geschlossen, so dass Sie auf die gewünschten Werte zugreifen können.

zum Beispiel:


var myService = { 
    doMyJob: function(params, cb){ 
    return cb(); 
    } 
}; 

function sample(a, b) { 

    var params = { 
     a: a, 
     b: b 
    }; 

    myService.doMyJob(params, function(err, response) { 
     if (err) { throw err; } 

     //access params.a and params.b 
     console.log(params.a); 
     console.log(params.b); 

    }); 
} 

sample("a", "b"); 

dies console.log:

ein

b

Update von Kommentaren unten

Hier ist eine Version, die eine Schleife verwendet und sie mithilfe von setTimeout async macht.


var myService = { 
    doMyJob: function(params, cb){ 
    setTimeout(function(){ 
     return cb(); 
    }, 50); 
    } 
}; 

function sample(a, b) { 

    var params = { 
     a: a, 
     b: b 
    }; 

    myService.doMyJob(params, function(err, response) { 
     if (err) { throw err; } 

     //access params.a and params.b 
     console.log(params.a, params.b); 
    }); 
} 

for (var i = 0; i <= 3; i++){ 
    sample("a" + i, "b" + i); 
} 

ich bin nicht sicher, wie Sie mit den falschen Werten von params sind zu enden. Gibt es noch etwas in Ihrem Code, das in diesem Beispielcode nicht dargestellt wird?

können Sie Beispielcode bereitstellen, der das Problem genau reproduziert?

+0

In der ersten Iteration, params.a = 1 und params.b = 2 annehmen. In der zweiten Iteration nehmen wir an, params.a = 3 und params.b = 4. Das Beispiel (a, b) wird innerhalb einer for-Schleife aufgerufen. Der Aufruf von myService.doMyJob wird gesammelt und zurückgegeben, wenn die for-Schleife beendet wird. Zu diesem Zeitpunkt haben params.a und params.b die neuesten Werte. Wie löse ich das? Ich würde die entsprechenden Werte von params.a und params.b des Funktionsaufrufs innerhalb des Rückrufs wünschen. –

+0

Ich bin nicht sicher, wie das passiert ... Ich habe mein Code-Beispiel aktualisiert, um eine Schleife zu verwenden und Async zu sein. Können Sie ein vollständiges Arbeitsbeispiel bereitstellen, das das Problem reproduziert? –

Verwandte Themen