2017-09-21 6 views
0

j'ai une fonction qui télécharge l'entrée utilisateur (actuellement nommé app.json) du navigateur (client) au serveursérie Async ne fonctionne pas dans un ordre comme prévu

function downloadUpload(callback){ 
    //Using formidable node package for downloading user input to server 
    var form = new formidable.IncomingForm(); 
    form.on('fileBegin', function(name, file) { 
     file.path = file.name; 
    }); 

    form.parse(req, function(err, fields, files) { 
     res.writeHead(200, { 'content-type': 'text/plain' }); 
     res.write('received upload:\n\n'); 
     res.end(util.inspect({ fields: fields, files: files })); 
    }); 

    callback(null); 


} 

J'ai une autre fonction prend le fichier téléchargé ci-dessus et le convertit au format requis (final.json) quelque chose comme ça.

function UpdateCode(callback){ 

    var obj = fs.readFileSync('app.json', 'utf8'); 

    var object = JSON.parse(obj); 
    var data2 = []; 
    for (var j = 0; j < object.length; j++) { 
     if (object[j].value == "TEST") { 
      data2.push(object[j]); 
     } 
    } 
    console.log(data2); 
    fs.appendFile('final.json', JSON.stringify(data2), function(err) { 
     if (err) throw err; 
     console.log('Saved!'); 
    }); 

    callback(null); 



} 

Je veux qu'ils courent dans un ordre, donc j'utilisé la méthode de la série async comme celui-ci

async.series([ 
    downloadUpload, 
    UpdateCode 


    ],function(err,result){ 
     if(err) throw err; 
     else{ 
      console.log(result); 
     } 
    }); 

Le problème est le fichier (app.json) est obtenir téléchargé et une erreur apparaît disant que app.json n'existe pas dans le dossier ou le répertoire en cours. Où vais-je mal?

+0

Possible copie de [Comment renvoyer la réponse d'un appel asynchrone?] (Https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous- appel) –

+1

Parce que vous appelez 'callback' avant que le fichier ne soit téléchargé. –

+0

Je ne t'ai pas eu. Le rappel est une partie de la fonction série asynchrone et j'essaie de le répliquer. Voulez-vous dire que je devrais supprimer le rappel dans la première fonction pour qu'il fonctionne correctement? – Saikiran

Répondre

1

C'est probablement ce dont vous avez besoin.

function downloadUpload(callback) { 
    //Using formidable node package for downloading user input to server 
    var form = new formidable.IncomingForm(); 
    form.on('fileBegin', function(name, file) { 
    file.path = "app.json"; 
    }); 

    form.parse(req, function(err, fields, files) { 
    res.writeHead(200, { 
     'content-type': 'text/plain' 
    }); 
    res.write('received upload:\n\n'); 
    res.end(util.inspect({ 
     fields: fields, 
     files: files 
    })); 
    }); 

    form.on('end', function() { 
    callback(null); 
    }); 
} 

function UpdateCode(callback) { 

    var obj = fs.readFileSync('app.json', 'utf8'); 

    var object = JSON.parse(obj); 
    var data2 = []; 
    for (var j = 0; j < object.length; j++) { 
    if (object[j].value == "TEST") { 
     data2.push(object[j]); 
    } 
    } 
    console.log(data2); 
    fs.appendFile('final.json', JSON.stringify(data2), function(err) { 
    if (err) throw err; 
    console.log('Saved!'); 
    callback(null); 
    }); 
} 

async.series([ 
    downloadUpload, 
    UpdateCode 
], function(err, result) { 
    if (err) throw err; 
    else { 
    console.log(result); 
    } 
}); 

utilisent également nodemon -e js app.js. Autrement nodemon va redémarrer le programme dès que le json télécharge.

+0

Merci, cela a fonctionné – Saikiran