2017-09-21 24 views
0

I持っているサーバーにブラウザ(クライアント)からのユーザ入力(現在の名前app.json)をダウンロード機能非同期シリーズは期待通りの順序では動作しません

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); 


} 

私は別の機能を持っています上でダウンロードしたファイルを取り出し、必要な形式(final.json)に変換します。

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); 
     } 
    }); 

問題のように非同期シリーズの方法を使用がダウンロード取得されたファイル(app.json)で、エラーが言って表示されますそのapp.jsonは現在のフォルダまたはディレクトリに存在しません。どこが間違っていますか?

+0

[非同期呼び出しから応答を返すにはどうすればいいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous- call) –

+1

ファイルがダウンロードされる前に 'callback'を呼び出しているからです。 –

+0

私はあなたを得ませんでした。コールバックは非同期シリーズ関数の一部であり、私はそれを複製しようとしています。コールバックが正しく機能するためには最初の関数でコールバックを削除する必要がありますか? – Saikiran

答えて

1

これはおそらく必要なものです。

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); 
    } 
}); 

またnodemon -e js app.jsを使用しています。さもなければ、nodemonは、jsonがアップロードするとすぐにプログラムを再起動します。

+0

ありがとうございました – Saikiran

関連する問題