以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - JavaScript 代码题
70. 实现Observable.from()
实现思路:
对于不同的数据类型,我们需要进行不同的处理:对于数组、类数组对象、Set、Map,可以通过 for...of 来获取元素并发送给观察者,对于 Promise,可以在 resolve 之后将数据发送给观察者,对于 Observable 实例,可以通过订阅原来的 Observable 来将数据发送给观察者。
实现代码如下:
const { Observable } = rxjs;
function from(data) {
return new Observable(observer => {
if (Array.isArray(data) || typeof data[Symbol.iterator] === 'function') {
for (let item of data) {
observer.next(item);
}
observer.complete();
} else if (typeof data === 'string') {
for (let i = 0; i < data.length; i++) {
observer.next(data.charAt(i));
}
observer.complete();
} else if (typeof data.then === 'function') {
data.then(res => {
observer.next(res);
observer.complete();
}, err => {
observer.error(err);
});
} else if (typeof data[Symbol.observable] === 'function') {
const sub = data[Symbol.observable]().subscribe({
next: item => observer.next(item),
error: err => observer.error(err),
complete: () => observer.complete()
});
return () => sub.unsubscribe();
} else {
for (let item of Object.values(data)) {
observer.next(item);
}
observer.complete();
}
});
}