この解答例は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をフラットに購読する
  • どの条件にも当てはまらない場合、エラーをスローしてサポートされていない型であることを示す