2017-01-13 9 views
1

からオブジェクトを結果として取得しますが、私は、ファイルorders.js名付けました。このようなものを想定します私は幸せです。今、私は私が(fast-csvノードパッケージを使用して)CSVからデータを読み取る必要があるため、物事をより複雑にしたいので、私はorders.jsを変更:高速CSV

var csv = require('fast-csv'); 

exports.getOrders = function(clientId) { 

    var orders = []; 

    csv 
    .fromPath("./data/orders.csv", {headers: true, delimiter:';'}) 
    .on("data", function(data) { 
     orders.push({'price' : data.price}); 
     } 
    }) 
    .on("end", function(){ 
     console.log(orders) // THIS WILL PRINT THE CORRECT ARRAY 
     return orders; 
    }); 

    console.log(orders); // THIS WILL PRINT AN EMPTY ARRAY 
    return orders; 
} 

Order.getOrders()がで呼び出されたとき、私は正しい配列を返すことができますどのようにreport.js

+0

返信 'Promise'またはコールバック – qxz

+0

コールバック用のasync.jsライブラリ –

+0

か、単に 'callback'パラメータを追加して結果を呼び出すことができます... – qxz

答えて

1

多くの非同期の機能がありますが、あなたはこの

1.report.js

var Order = require('./src/orders'); 
var c = 0; 

Order.getOrders(c, function(err, d) { 
     console.log('err', err, 'd', d); 
     // do what you want to do with response 'd' 
     // this will print an array of results 
     // argument c is value for clientId parameter, use your 
     // value or data 
}); 

2. order.jsのように行うことができます使用することができますが、このために、私は滝の方法

を使用しました

var csv = require('fast-csv'); 
var async = require('async') 
exports.getOrders = function (clientId, cb) { 

async.waterfall([ 
    function (callback) { 
     var orders = []; 
     csv.fromPath("./data/orders.csv", { headers: true, delimiter: ';' }) 
      .on("data", function (data) { 
       orders.push({ 'price': data.price }); 
      }) 
      .on("end", function() { 
       return callback(null, orders) 
      }); 

    } 
], function(err, d) { 
    if(err) return cb(err); 
    cb(null, d) 
}) 
} 
+0

'report.js'ファイルにはどのような変更が必要ですか? –