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