2016-06-29 22 views
0
hat

Dies ist mein Rückruf:Pass eine Blockvariable auf eine Callback-Funktion, die bereits Argumente

function evaluateServiceResponse(err, response){ 
    db.answerCollection.insert({id: response["serviceAnswer"]["id"]}); //problem is this line 

} 

Das ist mein Callback-Benutzer:

mysoapclient.invokeServiceMethod(jsonRecords,this.evaluateServiceResponse); 

Hier ist der gesamte Code. Innerhalb process erstelle ich einen Block Bezug auf meine Datenbank:

process(function(){ 
    ... 
    let db=null; 
    db = mongoClient.connect(connectionURL); 
    //Do whatever to create jsonRecords 
    mysoapclient.invokeServiceMethod(jsonRecords,this.evaluateServiceResponse); 
    ... 
}); 

Die invokeServiceMethod spricht dann Service ruft den Rückruf es die Service-Antwort übergeben.

Wie bekomme ich die DB-Referenz in meinen Rückruf evaluateServiceResponse?

Danke.

Antwort

0

Verwendung Schließung:

function evaluateServiceResponse(db){ 
return function(err, response){ 
    db.answerCollection.insert({id: response["serviceAnswer"]["id"]}); //problem is this line 
} 
} 

Und verwenden wie:

mysoapclient.invokeServiceMethod(jsonRecords,this.evaluateServiceResponse(db)); 
+0

Dank; das hilft :) – saab

0

Ich glaube, das ist das, was Sie wollen:

function evaluateServiceResponse(err, response, db){ 
    db.answerCollection.insert({id: response["serviceAnswer"]["id"]}); //problem is this line 
} 



process(function(){ 
    let db=null; 
    db = mongoClient.connect(connectionURL); 
    //Do whatever to create jsonRecords 
    mysoapclient.invokeServiceMethod(jsonRecords, (err, response) => { 
    return this.evaluateServiceResponse(err, response, db); 
    }); 
}); 
+0

Diese Lösung ist nicht korrekt. Ich denke das "das". Referenz kann nicht in den Körper eines Rückrufs transportiert werden. Deshalb habe ich den Fehler bei: TypeError: Kann die Eigenschaft 'evaluateServiceResponse' von undefined nicht lesen " – saab

+0

@saab Sie richtig. Funktion (Fehler, Antwort) war ursprünglich Pfeilfunktion. Wie auch immer, wird ursprünglichen Code beheben. –

+0

Ich verstehe nicht, was Sie Ist das nicht der gleiche Code wie vorher, nur mit einer neuen Syntax oder bin ich etwas verwirren? Ich meine, auch hier ist das "undefiniert". – saab