この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
謎のcontext.doneのnull
超小ネタです。 AWS Lambdaと格闘していてcontext.doneの第一引数nullが気になって仕方がなかったので、ざくっと調べてみました。
検証コード
index.js
function getProperties(obj) {
var properties = '';
for (var prop in obj){
properties += prop + "=" + obj[prop] + "\n";
}
return properties;
}
exports.handler = function(event, context) {
console.log('context = ' + getProperties(context));
context.done(null, "Hello");
}
結果
2014-12-08T08:03:23.919Z xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx context = invokeid=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx
done=function (err, message) {
if(doneStatus) {
return;
}
doneStatus = true;
var error = null;
if(!(typeof err == "undefined" || (typeof err == "object" && !err))) {
error = util.format(err);
console.log(error);
}
/*
* use a timeout to perform the operation once the user gives up control of the event thread
* This is how HTTP handler works right now
*/
setTimeout(function() {
postDone(error, message);
}, 0);
}
Message
-------
Hello
出てきました。持ってるプロパティは2つだけのようですね。invokeidとdoneというfunctionだけでした。
invokeid
ログの先頭に付与されていた値と同じものが入っていたので、Lambdaを実行する際に発行される一意なキーのようです。
done
サンプルでも最後にcontext.done()で実行されてました。1番目の引数にエラーオブジェクト、2番めの引数にメッセージオブジェクトを埋め込めば良いようです。
まとめ
JavaScriptは気軽に中が覗けて良いですね。context.done(null, message)の「nullってなんだよ」と思ったので調べてみました。 successHandlerとかfailHandlerを作らずに、ErrorもSuccessもひっくるめてdone一つで済ませちゃうんですね。JavaScriptの文化なのでしょうか( ꒪⌓꒪)