Ich habe eine verschachtelte Funktion, die einige I/O durchführt und einen Rückruf aufruft, sobald sie mit den resultierenden Daten fertig ist. Etwas wie folgt aus:Bearbeiten von Daten in einer Callback-Funktion
function getStatus(returnCallback, errorCallback) {
sendRequest('someData', returnCallback, errorCallback)
}
wobei sendeanfrage() ist eine Funktion, die mit Hardware und ruft die returCallback mit den Daten interagiert, die es von der Hardware oder dem errorCallback, falls etwas schief gelaufen bekam. Mein Problem ist jetzt, dass die Daten, die die Hardware zurückgibt, eine wirklich lange Zeichenfolge ist, die aus verschiedenen Zahlen besteht, die verschiedene Parameter darstellen. Ich möchte die Daten bearbeiten, die dem returnCallback übergeben werden, und mit einer Eigenschaft für jeden Parameter erstellen und ein Objekt erstellen. Gibt es eine Möglichkeit, das zu tun? Ich habe bereits versucht mit async.waterfall
function getStatus(returnCallback, errorCallback) {
let returnArray = {};
async.waterfall([
function (callback) {
sendRequest('someData', callback, errorCallback);
},
function (data, callback) {
returnArray.statusBits = data.slice(0, 6);
returnArray.faultBits = data.slice(7, 13);
returnArray.alertBits = data.slice(14, 20);
returnArray.pumpRotationSpeed = parseInt(data.slice(21, 26));
returnArray.motorPower = parseInt(data.slice(27, 31));
returnArray.frequencyConverterTemperature = parseInt(data.slice(36, 39));
returnArray.pumpOperationTime = parseInt(data.slice(44, 48));
callback(null, returnArray)
}
], returnCallback(returnArray));
aber das tut nichts. Wie es aussieht, wird die zweite Funktion im Wasserfall nie aufgerufen. Dies könnte sein, da der Rückruf von der ersten Funktion ist nicht im Wasserfall wie erwartet strukturiert und es gibt mit Rückruf (Daten) statt Rückruf (null, Daten)
danke das wies mich in die richtige Richtung –
Gibt es tatsächlich eine Möglichkeit, die Tatsache, dass ich eine zweite Callback-Funktion, die für die Fehler verantwortlich ist, zu integrieren? Damit der Wasserfall gestoppt wird, wenn sendRequest einen Fehler zurückgibt? Etwas wie 'sendRequest ('someData', functon (Daten) {Rückruf (null, Daten)}, Funktion (Fehler) {Rückruf (Fehler, null)})' –
Sie tun es nicht so mit Wasserfall, der Ziel ist es, am Ende des Wasserfalls zu gehen, indem entweder alle verbleibenden Schritte übersprungen werden, wenn Fehler auftreten, oder am Ende des Wasserfalls, nach Fehlern suchen und mit ihnen umgehen. – DrakaSAN