2017-01-24 1 views
0

Ich habe diese Frage gestern gepostet, aber ich denke, ich habe gerade alle verwirrt. Ich habe Antworten wie "Was genau ist deine Frage?" Ich dehne mich also aus und reposte heute.Weitergabe von Variablen durch Callback-Funktionen in node.js

Das folgende node.js-Snippet stammt aus der Datei "accounts.js", die sich in einer ETrade-API-Bibliothek befindet, die im Pfad/lib existiert. Es sollte json zurückgeben, das Daten über die Konten des authentifizierten Benutzers enthält. Der Authentifizierungsteil funktioniert großartig. Ich bin verwirrt darüber, was genau in der letzten Zeile dieser Funktion getan:

vor
this._run(actionDescriptor,{},successCallback,errorCallback); 

Zehn Jahre (das letzte Mal war ich Codierung), wir haben nicht das Konstrukt haben „dieses“ und ich haven Es ist kein Hinweis auf "_run" und die Google-Suche war nicht hilfreich. Hier ist die Funktion.

exports.listAccounts = function(successCallback, errorCallback) { 
 
    var actionDescriptor = { 
 
    method: "GET", 
 
    module: "accounts", 
 
    action: "accountlist", 
 
    useJSON: true, 
 
    }; 
 

 
    this._run(actionDescriptor, {}, successCallback, errorCallback); 
 
};

Ich verstehe, dass die Funktion mit Zugriff auf „et.listAccounts ....“ aber dann geht mein Verständnis alle in der Hölle. Es ist ziemlich offensichtlich, dass ein get ausgeführt wird und json Daten zurückgegeben werden. Es ist auch offensichtlich, dass das Ergebnis durch den successCallback zurückgegeben wird.

In meiner app.js Datei, ich habe folgenden:

var etrade = require('./lib/etrade'); 
 
var et = new etrade(configuration);

Kann jemand bitte einen Schnipsel vorschlagen, in app.js verwendet werden, die folgenden Ausgabe der Konten Daten an den Konsole?

Es scheint, als müssten die JSON-Daten durch den successCallback zurückgegeben werden, aber ich weiß nicht, wie ich auf der Seite von app.js darauf zugreifen kann.

Angenommen, in app.js möchte ich die Konten Daten in einer Variablen namens myAccounts setzen. Die Funktion exports.listAccounts gibt keinen Rückgabewert an, daher bezweifle ich, dass ich var myAccounts = et.listAccounts() ausführen kann. Ebenso ist myAccounts nicht definiert, wenn ich dies versuche: et.listAccounts() {myAccounts, error}. Schließlich enthält die listAccounts-Funktion zwei mögliche Variablennamen, die ich verwenden könnte, "accounts" und "accountlist", aber diese erweisen sich bei app.js als undefiniert.

Wenn ich eine Funktion in successCallback in app.js eine generische Nachricht an die Konsole schreiben, wird die Nachricht im Protokoll angezeigt, damit ich weiß, dass ich es in die listAccounts-Funktion und zurück erfolgreich mache. In diesem Fall zeigt das Protokoll auch "Anfrage: [GET]: https://etwssandbox.etrade.com/accounts/sandbox/rest/accountlist.json"

Daraus kann ich ableiten, dass die Daten tatsächlich zurückgegeben werden und an diesem Endpunkt verfügbar ist.

+0

'_run' ist keine Standardmethode in js oder sogar Knoten. Wahrscheinlich stammt es von der API, die Sie zum Abrufen der Daten verwenden. Wir müssen wissen, was das ist zu verstehen, was es tut – slebetman

+0

@slebetman es ist hier https://github.com/theidealist/node-etrade-api/blob/master/lib/accounts.js – Jack

+0

ja, das ist richtig. – Jerome

Antwort

1

Vor zehn Jahren (das letzte Mal war ich Codierung), wir haben nicht das Konstrukt haben „dieses“ und ich habe keine Ahnung, über „_run“

this bezieht sich auf die aktuelle Objekt, weiterführende Literatur here. _run ist genau das, was sie gewählt haben, um die Funktion aufzurufen.

Ich habe keine Erfahrung mit diesem Modul, aber mit einem flüchtigen Blick auf die Git-Repo vermute ich, Sie wollen Ihre app.js erweitern wie so:

et.listAccounts(function(response) { 
    console.log(response); 
}); 

In JavaScript-Funktionen erster Ordnung sind und kann so sein, herumgereicht wie Variablen see here. listAccounts möchte eine Funktion übergeben, und wenn es abgeschlossen ist, wird es mit einem Parameter aufrufen, wie in etrade.js zu sehen ist.

Es gibt auch die Funktion errorCallback, die sehr ähnlich ist, aber bei einem Fehler aufgerufen wird. Sie könnten das obige Snippet wie folgt erweitern:

et.listAccounts(function(response) { 
    console.log(response); 
}, function(error) { 
    console.log(error); 
}); 
+0

Vielen Dank! Hätte nie daran gedacht. Das Konsolenprotokoll listet nun 8 Objekte auf und ich werde versuchen herauszufinden, was in ihnen ist. Ich nehme an, das wird nicht so schwierig sein. – Jerome

+0

console.log (Antwort) sagt {'json.accountListResponse': {Antwort: [[Objekt], [Objekt], [Objekt], [Objekt], [Objekt], [Objekt], [Objekt], [Objekt] ]}} – Jerome

+0

Das ist ziemlich schrecklich. Diese Eigenschaft hat einen Punkt, so dass Sie '' statt Punktnotation verwenden müssen, um darauf zuzugreifen. Sehen Sie, was sich in den Objekten mit 'a ['json.accountListResponse'] befindet. Response ' – Jack

Verwandte Themen