Nehmen wir an, ich habe eine Schaltfläche auf meiner Webseite und ein Ausgabefeld. Wenn ich auf die Schaltfläche klicke, wird eine asynchrone Funktion mehrmals aufgerufen. Jedes Mal gibt die Funktion einige Daten zurück, die ich an das Ausgabefeld senden (und an die vorherigen Daten anhängen) möchte. HierNodeJs hängt Daten von der asynchronen Funktion an
ist die main.js:
$(document).ready(function() {
$("#submitButton").on('click', function() {
$.post(
'/',
{
text: inputField.val(),
depth: $('#depthField').val()
},
function (response) {
let outField = $('#outputField');
let txt = outField.text().trim();
outField.text(txt + "\n new data: " + response);
}
);
});
}
Und dann habe ich eine index.js:
router.post('/', function (req, res) {
let text = req.body.text;
getHTML(text, function (buf) {
doParse(buf, function (out) {
res.send(out);
})
});
});
getHTML gibt einige Daten, die von doParse vorgegangen wird. Der doParse erzeugt auch einige Daten, die zurück in das Ausgabefeld geparst werden sollen.
Ich denke, die Post-Methode ist nicht der richtige Weg, um dies zu tun, weil es nur einmal aufgerufen wird?
EDIT 1:
Das Problem ist, dass ich nur die ersten Daten sehen kann, die durch den Rückruf senden, so erhalte ich ein
(node: 16436) UnhandledPromiseRejectionWarning: Unbehandelte Ablehnung des Versprechens (Zurückweisungs-ID: 1): Fehler: Nach dem Senden können keine Header festgelegt werden.
EDIT 2:
Hauptarbeits der 2 Funktionen 'getHTML' und 'doParse':
const getHTML = function(callback) {
for (let j = 0; j < 10; j++) {
callback(j);
}
};
const doParse = function(buf, callback) {
let msg = 'val = ' + buf;
console.log(msg);
callback(msg);
};
Beitrag ist in Ordnung - was ist die Art Ihrer Schwierigkeit? Sie haben nicht wirklich ein Problem beschrieben, das Sie haben –
als @ JaromandaX erwähnt bitte beschreiben Sie Ihr Problem im Detail, aber Sie sollten.end() in Ihrem Nodejs doParse Callback verwenden, um die Antwort zurück zu senden: https://nodejs.org/ api/http.html # http_response_end_data_encoding_callback –
Wie oben bearbeitet, erhalte ich immer einen 'Kann nicht festlegen, Kopfzeilen, nachdem sie gesendet werden' Fehler. – Soro