この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - JavaScript コーディング問題
70. Observable.from()を作る

function from(input) {
  return new Observable(observer => {
    if (Array.isArray(input) || typeof input[Symbol.iterator] === 'function') {
      for (const item of input) {
        observer.next(item);
      }
      observer.complete();
      return;
    }
    
    if (typeof input.then === 'function') {
      input.then(
        result => {
          observer.next(result);
          observer.complete();
        },
        error => observer.error(error)
      );
      return;
    }
    
    if (typeof input[Symbol.observable] === 'function') {
      const source$ = input[Symbol.observable]();
      source$.subscribe({
        next: value => observer.next(value),
        error: error => observer.error(error),
        complete: () => observer.complete()
      });
      return;
    }
    
    throw new TypeError('Unsupported observable');
  });
}

解説:

  • from関数は、与えられた引数が配列、iterable、Promise、Observable-likeのどれかであるかどうかを判別し、それぞれに対応するObservableを生成する
  • 引数が配列またはiterableである場合、for...ofループを使用してすべての要素を順番に配信し、最後にcompleteイベントを発行する
  • 引数がPromiseである場合、thenメソッドを呼び出して解決された値を配信し、またはエラーが発生した場合はエラーを送信する
  • 引数がObservable-likeである場合、Symbol.observableメソッドを呼び出して実際のObservableを取得し、そのObservableをフラットに購読する
  • どの条件にも当てはまらない場合、エラーをスローしてサポートされていない型であることを示す