È Node.js Array.mappa() asincrona?
Posso contare su di nodeIDs mappatura è completato ogni volta doSomething() viene chiamato?
nodeIDs = $.map(nodeIDs, function(n){
return n.match(/\d+$/);
});
doSomething(nodeIDs);
Ho pensato a tutte le richiamate in node.js sono asincrone? Ho letto un articolo su di programmazione generale richiamata potrebbe essere sincroni, ma non sono sicuro node.js?
- che cosa è di $ qui? mappa assume una funzione di callback da applicare a ogni membro della lista, non un callback quando completa iterazione è completa.
- Grazie chovy. Per quanto riguarda i $, stavo sperimentando con il nodo-jquery modulo e non si preoccupò di modifica che fuori.
JavaScript è anche un linguaggio di programmazione funzionale. Quello che hai qui è un «ordine superiore ” funzione», una funzione che prende una funzione come parametro. Di ordine superiore funzioni sono sincroni (ma vedi nota sotto).
Fonti:
map()
è un tipico esempio di una funzione di ordine superiore. Si prende una funzione e si applica a tutti gli elementi di un array. La definizione suona molto «funzionale». Questa funzione non è anche fornito dal Nodo. Essa è documentata da MDN Array.prototipo.mappa() e specificato da ECMAScript 5.1.Per rispondere alla tua domanda: Sì,
doSomething(nodeIDs)
è chiamato dopo tutti gli elementi sono stati applicati.Nota: di ordine superiore funzione è un concetto di programmazione funzionale. JavaScript è funzionale, ma anche profondamente seduti nella praticità di esecuzione del codice all’interno di un browser o sul server. Direi che, per esempio,
setTimeout()
non è una funzione di ordine superiore, anche se si prende una funzione come parametro perchésetTimeout()
non è davvero puramente funzionale, perché si utilizza il tempo. Pura funzionalità è senza tempo. Per esempio il risultato dimap()
non dipendono dal tempo. Ed è quello che questa domanda è veramente. Se qualcosa non dipendono dal tempo di eseguirlo in modo sincrono. Problema risolto.Grazie a Simone per contestare la definizione di ordine superiore funzione in JavaScript.
Sì,
.map
è sincrono. “Callback” non implica “asincrona”.Array.map()
è documentato qui: developer.mozilla.org/en-US/docs/JavaScript/Reference/….importare il
async
il modulo per avere un asincrono ‘map
‘ metodoQuesta funzione è sincrona – altrimenti non potrebbe restituire il risultato dell’operazione di mapping.
Tutte le funzioni di callback che potrebbe richiedere più tempo (a causa soprattutto IO) sono asincrone in nodejs – a meno che il metodo è esplicitamente indicati come sincrona (come
fs.readFileSync
– ma che non fa uso di un callback). Probabilmente confuso che, in qualche modo.utilizzare un forof (sincrono):
Ci è utile lib in attesa di. E mappa vi aiuterà.