アイティプランターで水耕栽培

JavaScriptのbind

2018年4月18日 - 未分類

JavaScriptやnodejsで、定期的な実行をする配列を作りたい場合のことです。setIntervalは、初回は実行されません。

/*初回は実行されない */
job.push(
setInterval(function f(m){
writeConfigFile(t[m]);
}.bind(null,m), intervalTime)
)

次のように書くと、初回も実行されます。しかし、mがbindされないために、2回め以降の呼び出しで、mがundefineになります。

/* 初回は実行されるが、mがbindされない */
job.push(
setInterval((function f(m){
writeConfigFile(t[m]);
return f;
}.bind(null,m)()), intervalTime)
)

こんな時には、次のように書くと、上手く動作します。

/* 初回は実行されるし、mもbindされる */
job.push(
setInterval((
function(m){
(function f(m){
writeConfigFile(t[m]);
return f;
}.bind(null,m)().bind(null,m))
}.bind(null,m)), intervalTime)
)

return fで戻ってきた関数fに、bindするようなイメージですね。

Translate »