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