ヒデホヒのおもちゃばこ

オリスロとかつくったものとかてきとーに

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を呼ぶとみょーなエラーで蹴られてしまうf:id:pekko1215:20180906232303p:plain 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を継承するのはやっぱりしないほうがいいですね