2017-01-03 6 views
1

私は、私が設定したAPIゲートウェイを介してAWSでラムダを呼び出すことに取り組んでいる大きなプロジェクトを持っています。ラムダでは、私は動的に次を使用して、APIリクエストのクエリ文字列のparamに基づいて変数を呼び出すようにしようとしている:なぜNodeはこれが関数ではないと思うのですか?JavaScriptはときどきうまくいくのですか?

var functionToCall = event.queryStringParameters.tech; 
console.log("functionToCall is " + functionToCall); 
global[functionToCall](event, output); 

残念ながら、私は私がしました

TypeError: global[functionToCall] is not a function 

のエラーが出ますオンラインでそれを実証するためにウィンドウを使ってこれを書き換え、jsbinで実行するかjsfiddleで実行するかによって、結果が異なります。 jsbinで、次の作品:

'use strict'; 
var functionArray = ["one", "two", "three"]; 
var randFunction = functionArray[Math.floor(Math.random() * functionArray.length)]; 

function one() { 
    console.log("function one called"); 
}; 

function two() { 
    console.log("function two called"); 
}; 

function three() { 
    console.log("function three called"); 
}; 

console.log(randFunction); 
window[randFunction](); 

私はjsfiddleでそれを実行して、私は「最終的に私はそれとして、私のラムダ(Node.jsの)でこれを実行するにはいくつかの助けを探しています

Uncaught TypeError: window[randFunction] is not a function 
    at window.onload (VM99:49) 

取得します物事を容易にし、また私がドライになるのを助けます。

ありがとうございます!

+1

jsFiddleしたがって、変数はグローバルではありません、関数内のコードをラップします。 –

+0

@FelixKlingそれは理にかなっています。そこに明確化のおかげで! – metropolis

答えて

3

Node.jsでは、各モジュールに独自のスコープがあり、暗黙のグローバルを取得することはありません。

代わりに文字列やグローバルに頼るので、あなたが直接、関数の配列を作成する必要があります。

var functions = [ 
    function() {...}, 
    function() {...}, 
    function() {...} 
]; 
+0

もう少し拡張して例を挙げてください。 – metropolis

+0

例が追加されました... – SLaks

+0

または名前付き関数を持つオブジェクト.... – epascarello

関連する問題