2

私は、ノード6.10を使用してAWSラムダでES6クラスの構文を使用したいと思いますが、私はそれを動作させることはできません。AWS LambdaでES6クラス構文を使用できますか?

class widget { 
    constructor(event, context, callback) { 
     callback(null, `all seems well!`); 
    } 
} 

// module.exports.handler = widget; // "Process exited before completing request" 
module.exports.handler = new widget(); // "callback is not a function" 

は、誰もがクラスの構文を使用して成功を収めていますか?クラスコンストラクタは、明らかにハンドラ関数として見なされることはありません。

+1

あなたの例では、 'callback' _isn't_機能を。コールバックは3番目の引数であり、あなたはまったく渡していません。 'ウィジェット'は関数ではないと言っているわけではありません。あなたのES6は正常に動作します。 – loganfsmyth

+0

'new widget()'にパラメータを渡していないので、もちろん失敗します。 – 4castle

+0

AWSラムダハンドラによってコールバック関数が提供されていませんか?私たちの呼び出すTHEIRハンドラは、データをどのように戻すか、間違っていますか?ラムダのイベント、コンテキスト、コールバックを取得します。 –

答えて

5

ラムダが予期しているAPIに従っていません。 the documentation saysとして、それはその後、ここでの問題はES6クラスはnewで作成する必要があるということである

const handlers = require('your-module'); 
handlers(); 

と呼ぶだろう

exports.myHandler = function(event, context, callback) {}; 

を期待しています。 Lambda APIは関数を期待しているので、構造化可能な関数ではなく呼び出し可能な関数を期待しています。クラスを使用する場合は、関数をエクスポートする必要があります。

class widget { 
    constructor(event, context, callback) { 
    callback(null, `all seems well!`); 
    } 
} 

exports.myHandler = function(event, context, callback) { 
    new widget(event, context, callback); 
}; 
+1

そして、ラムダのコードを「ES6」化する努力を払うのは、この重要ではない明らかな詳細です。「建設的な機能ではなく、呼び出し可能な機能を期待しています。 –

0

あなたの質問に答えるには、はい、ノード6ラムダ機能でES6クラスを使用できます。しかし、このコードは動作しません。

ラムダ・ハンドラは、あなただけのそれはwidget(event, context, callback)を呼び出します

module.exports.handler = widget; 

を渡した場合、あなたのコンストラクタは発生しませんので、あなたのクラスにnewを呼び出すするつもりはありません。あなたがそれを渡す前にnewに電話すると、ハンドラからのコールバック参照はまだありません。基本的に初期化された値を持たない新しいオブジェクトを作成しています。 new widget()を呼び出していますが、何も渡していないので、ハンドラがこの新しいインスタンスを呼び出して呼び出します。これを行うには(私の知る限り)地球上にない理由はありません

が、あなたでし

class widget extends Function { 
    constructor(){ 
     super('...args', 'return this.__call__(...args)'); 
     return this.bind(this);  
    } 

    __call__(event, context, callback) { 
    callback(null, "Dude, this is wierd.") 
    } 
} 
exports.handler = new widget() 
+0

これは、見逃したように、意味をなさないものです。それを創造してください! AWS Lambdaが 'new'を呼び出すことなく、このOOP砂糖を使用する努力がなくなります。 **悲しい** –

関連する問題