Kann ich mich darauf verlassen, dass die Zuordnung der Knoten-IDs bei jedem Aufruf von doSomething () abgeschlossen ist?
nodeIDs = $.map(nodeIDs, function(n){
return n.match(/\d+$/);
});
doSomething(nodeIDs);
Ich dachte, alle Rückrufe in node.js sind asynchron? Ich habe einen Artikel über die allgemeine Programmierung gelesen, wonach Rückruf synchron sein könnte, bin mir aber bei node.js nicht sicher?
6 Antworten
JavaScript ist auch eine funktionale Programmiersprache. Was Sie hier haben, ist eine Funktion höherer Ordnung, eine Funktion, die eine Funktion als Parameter verwendet. Funktionen höherer Ordnung sind synchron (siehe Hinweis unten).
Quellen:
map()
ist ein typisches Beispiel für eine Funktion höherer Ordnung. Es nimmt eine Funktion an und wendet sie auf alle Elemente eines Arrays an. Die Definition klingt sehr «funktional». Diese Funktion wird auch von Node nicht bereitgestellt. Es wird von MDN Array.prototype.map ()
So beantworten Sie Ihre Frage: Ja, doSomething(nodeIDs)
wird aufgerufen, nachdem alle Elemente angewendet wurden.
Hinweis:
setTimeout()
setTimeout()
map()
Vielen Dank an Simon für die Herausforderung der Definition der Funktion höherer Ordnung in JavaScript.
Diese Funktion ist synchron - andernfalls konnte das Ergebnis der Kartenoperation nicht zurückgegeben werden.
Alle Rückrufe, die möglicherweise länger dauern (hauptsächlich aufgrund von E / A), sind in nodejs asynchron - es sei denn, die Methode ist ausdrücklich als synchron markiert (z. B. fs.readFileSync
-, aber es wird kein Rückruf verwendet). Sie haben das wahrscheinlich irgendwie verwirrt.
Importieren Sie das Modul async
mit einer asynchronen Methode 'map
'
var async = require('async');
var arr = ['1','2'];
async.map(arr, getInfo, function (e, r) {
console.log(r);
});
function getInfo(name, callback) {
setTimeout(function() {
callback(null, name + 'new');
}, 1000);
}
Ja, .map
ist synchron. "Rückruf" bedeutet nicht "asynchron".
Benutze ein forof (ist synchron):
let arr = ['fizz', 'buzz']
//example
for (const item of arr) {
//this Examp_func returns array
console.log((await Examp_func(item )).length);
}