2016-07-13 10 views
0

asyncを使用してコントローラを作成しようとしていますが、3番目のパラメータとして匿名関数を渡すことはできません。予期せぬトークンの構文解析エラーが発生し続ける{ - '任意のアイデア?パラメタの中で関数(エラー、応答)を直接渡すだけで、エラーは消えてしまいます。私は基本的に、返される2つのオブジェクトを繰り返し処理しようとしています。各オブジェクトのコントラクト名を見つけて、そのコントラクトに割り当てられたデータの配列を割り当てます。ノードコントローラ - 非同期パス匿名関数

var request = require('request'), 
helpers = require('../../helpers.js'), 
async = require('async'); 

module.exports.getStatementBreakdown = function(req, res) { 
    var httpGet, 
    response, 
    urls = [ 
     '/financial-advances/', 
     '/financial-adjustments/' 
    ]; 

    httpGet = function(url, callback) { 
     var options = helpers.buildAPIRequestOptions(req, url); 
     request(options, 
      function(err, res, body) { 
       var data = {}; 
       if(!err && res.statusCode === 200) { 
        data = JSON.parse(body); 
       } 
       callback(err, data); 
      } 
     ); 
    }; 

    response = function(err, responses) {} 

    async.map(urls, httpGet, response) { 
     var statementBreakdown = {}, 
     response, 
     breakdown, 
     i, 
     j, 
     contractName, 
     key; 

     for(i = 0; i < responses.length; i++) { 
      response = responses[i]; 
      for(key in response) { 
       if(key !== 'meta' || key !== 'notifications') { 
        breakdown = response[key]; 
        for(j = 0; j < breakdown.length; j++) { 
         contractName = breakdown[j].reimbursementContract.name; 
        } 
       } 
      } 
     } 
     statementBreakdown[contractName] = []; 
     statementBreakdown[contractName].push(breakdown); 
     res.send(statementBreakdown); 
    }); 
}; 
+0

'async'はES2016のキーワードです。ご使用のnode.jsのバージョンによっては、これが問題である場合とそうでない場合があります。 'async'変数の名前を変更してみてください。 –

+0

aSyncは私が使用しているライブラリの名前です - 私はこれを別のコントローラで動作させていますが、匿名の関数を使用していません – Jackthomson

+0

あなたが投稿したコードはあなたが動作していないコードではありません。 'async.map()'で無名関数を使用していません。あなたは動作していないコードを投稿できますか? – Paul

答えて

2

投稿したコードサンプルに基づいて、間違った場所に中括弧があるため、予期しないトークンが表示されます。

ここをクリックしてください:async.map(urls, httpGet, response) {?その中括弧は予想外のトークンです。

Javascriptは、あるべきではない文字があるときに予期しないトークンを与えます。この場合、関数の直後に中括弧を追加しました。となります。制御フロー文と関数の宣言の後に中括弧が必要です。

私は正確に何のために行くのかは分かりませんが、このようなものでしょうか?

async.map(urls, httpGet, function(err, responses) { 
     var statementBreakdown = {}, 
     response, 
     breakdown, 
     i, 
     j, 
     contractName, 
     key; 

     for(i = 0; i < responses.length; i++) { 
      response = responses[i]; 
      for(key in response) { 
       if(key !== 'meta' || key !== 'notifications') { 
        breakdown = response[key]; 
        for(j = 0; j < breakdown.length; j++) { 
         contractName = breakdown[j].reimbursementContract.name; 
        } 
       } 
      } 
     } 
     statementBreakdown[contractName] = []; 
     statementBreakdown[contractName].push(breakdown); 
     res.send(statementBreakdown); 
    }); 
}); 

async.mapの詳細については、docsを参照してください。