Ordine di esecuzione non rispettato Node.js

di il
4 risposte

Ordine di esecuzione non rispettato Node.js

Salve a tutti, sto provando a scrivere uno script in Node.js che possa prendere dati da un file di testo, analizzarli e modificarli a piacimento.
Purtroppo però non capisco perché l'esecuzione dei comandi non avviene proprio in ordine cronologico e non capisco a cosa sia dovuto.

Ho usato diversi console.log() al fine di far capire cosa intendo, di seguito la prima parte del codice
console.log("+++");
    console.log("0")
    var oldData = getOldData("pattern");
    console.log("Debug#2: " + oldData);
    // ...
    // Modifica dei dati
    // ...
    console.log("6")
    console.log("---");
Funzione getOldData()
function getOldData(pattern) {
    console.log("1")
    var matchDataOfFunction = []
    var fs = require('fs');
    try {
        fileData = fs.readFileSync(path, 'utf8');
        regex = new RegExp(pattern + '\\s\\{'); 
        match = fileData.match(regex);
        console.log("2")
        if (match != null) { // Exist
            const lineReader = require('line-reader');
            lineReader.eachLine(path, function (line) {
                console.log("3")
                if (line.includes(pattern)) {
                    console.log("4")
                    regexp = /\{(\w+)\}/g;
                    matchDataOfFunction = [...line.match(regexp)];
                    console.log("Debug#C: " + matchDataOfFunction);
                    return matchDataOfFunction;
                }
            });
        }

    } catch (err) { console.log(err) }
    console.log("5")
    console.log("Debug#B: " + matchDataOfFunction)
    return matchDataOfFunction;
}
Secondo quanto scritto il risultato dovrebbe essere così:
+++
0
1
2
3
3
3
4
Debug#C: <dati>
5
Debug#B: <dati>
Debug#2: <dati>
6
---

Ma l'output che ottengo è questo qua:
+++
0
1
2
5
Debug#B: <dati>
Debug#2: <dati>
6
---
3
3
3
4
Debug#C: <dati>
Qualcuno può aiutarmi a capire che succede?

4 Risposte

  • Re: Ordine di esecuzione non rispettato Node.js

    Ho risolto sostituendo nella funzione getOldData() la porzione di codice [CODE] const lineReader = require('line-reader'); lineReader.eachLine(path, function (line) { console.log("3") if (line.includes(pattern)) { console.log("4") regexp = /\{(\w+)\}/g; matchDataOfFunction = [...line.match(regexp)]; console.log("Debug#C: " + matchDataOfFunction); return matchDataOfFunction; } }); che utilizzavo per leggere linea per linea un file di testo, con la seguente porzione di codice [CODE]const lineReader = require('read-each-line-sync'); lineReader(path, 'utf8', function(line) { if (line.includes(pattern)) { regexp = /\{(\w+)\}/g; matchDataOfFunction = [...line.match(regexp)]; return matchDataOfFunction; } })
  • Re: Ordine di esecuzione non rispettato Node.js

    NoNameoN ha scritto:


    Purtroppo però non capisco perché l'esecuzione dei comandi non avviene proprio in ordine cronologico e non capisco a cosa sia dovuto. [...] Qualcuno può aiutarmi a capire che succede?
    L'ordine cronologico viene rispettato appieno: il problema è che alcune delle operazioni che usi sono asincrone, ossia tu avvii una operazione che verrà conclusa in seguito, fornendo il callback da eseguire al termine, mentre nel frattempo l'esecuzione del codice prosegue nelle istruzioni successive.

    La tua risoluzione fa uso di funzioni "sincrone" che sono del tutto inefficienti in ambiente Node.

    Devi studiare la programmazione asincrona in Node.

    Ciao!
  • Re: Ordine di esecuzione non rispettato Node.js

    Alka ha scritto:


    La tua risoluzione fa uso di funzioni "sincrone" che sono del tutto inefficienti in ambiente Node.
    Ma allora, visto quello che mi serve, le funzioni sincrone sono l'unica risposta al mio problema, per quanto possano essere inefficienti
  • Re: Ordine di esecuzione non rispettato Node.js

    NoNameoN ha scritto:


    Ma allora, visto quello che mi serve, le funzioni sincrone sono l'unica risposta al mio problema, per quanto possano essere inefficienti
    In poche parole, stai dicendo che per l'esigenza di spazzare il pavimento di casa tua, il rastrello sia l'unico strumento che puoi utilizzare sebbene inadatto in quanto non vuoi approfondire come funziona una scopa?
Devi accedere o registrarti per scrivere nel forum
4 risposte