Promiseのサブクラス (マニアック)
動作イメージ
/* サブクラス「echoPromise」のクラス定義 new echoPromise(arg)をすると、3秒後にthenにargが帰ってくる */ (async function(){ console.log(await new echoPromise("にゃん")); })() // 3秒後ににゃんと表示したい
はじめは誰しもこんな感じの定義がしたいはず
class echoPromise extends Promise{ constructor(arg){ super(resolve=>{ setTimeout(()=>{ resolve(arg) },3000) }) } }
けれど、thenを呼ぶとみょーなエラーで蹴られてしまう resolve(arg)をラムダ式でラップしたり、this.resolveを書き換えたりいろいろやったけど動いたのは以下の構文のみ
class echoPromise extends Promise{ constructor(fn = function(resolve,reject){ setTimeout(()=>{ resolve(arg) },3000) },arg){ super((resolve,reject)=>{ return fn(resolve,reject) }) } } (async function(){ console.log(await new echoPromise(undefined,"にゃん")); })()
fnにあとから代入 -> だめ
引数の順番を変える -> だめ
Promiseというかnative codeを継承するのはやっぱりしないほうがいいですね