BFE.devでのAI解答例 - JavaScript コーディング問題
67. Promiseを実装する
以下は、文字列を受け取ってその文字列を大文字にするMyPromise
を実装するサンプルコードです。これを参考に、上記のスペックを満たすMyPromise
を実装してください。
class MyPromise { constructor(executor) { this.callbacks = []; this.onCatch = null; this.isPending = true; const resolve = (value) => { if (!this.isPending) return; this.isPending = false; this.callbacks.forEach((callback) => { value = callback(value); }); }; const reject = (error) => { if (!this.isPending) return; this.isPending = false; if (this.onCatch) { this.onCatch(error); } else { throw error; } }; try { executor(resolve, reject); } catch (error) { reject(error); } } then(onFulfilled) { const promise = new MyPromise((resolve) => { this.callbacks.push((value) => { const newValue = onFulfilled(value); resolve(newValue); return newValue; }); }); return promise; } catch(onRejected) { this.onCatch = onRejected; } static resolve(value) { const promise = new MyPromise((resolve) => { resolve(value); }); return promise; } static reject(error) { const promise = new MyPromise((resolve, reject) => { reject(error); }); return promise; }}// 使用例const promise = new MyPromise((resolve) => { resolve('Hello, World!');});promise .then((value) => { return value.toUpperCase(); }) .then((value) => { console.log(value); // HELLO, WORLD! });