へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)! #vZkt8fc6J

Promiseで、thenよりも先にcatchを書いてみる

const handleError = (e) => {
  console.error('Error', e)
}

const wrap = (func) => (...args) => {
  let promise = new Promise(resolve => resolve(func(...args)))
  let onRejected = handleError

  const promiseWrapper = {
    all: (onResolveds) => {
      onResolveds.forEach((onResolved) => {
        promise = promise.then(onResolved)
      })
      promise.catch(onRejected)
    },
    // catch: (handler) => {
    //   onRejected = handler
    //   return promiseWrapper
    // }
  }

  return promiseWrapper
}


const plus = (a, b, c) => {
  return a + b + c
}

const promisedPlus = wrap(plus)


promisedPlus(2, 1, 3)
.all([
  x => x * 4,
  () => { throw 'err' }, // handleErrorでハンドルできる
  x => console.log('x')
])

本当はthen.then.thenってやりたかったけど、thenってやると作れないので諦めた。おそらくPromiseの実装自体を変えないといけないっぽい

catchの部分はおまけ