Rxjs 如何创建一个类似于使用observable.create延迟返回的observable?

Rxjs 如何创建一个类似于使用observable.create延迟返回的observable?,rxjs,observable,rxjs6,Rxjs,Observable,Rxjs6,我试图创建一个行为类似于defer返回的可观察对象,但使用create方法。所以我试着: const obs = Observable.create(function(observer) { from(fetch('https://jsonplaceholder.typicode.com/todos/1').then(console.log('fetch done'))).subscribe(observer) }) setTimeout(()=>obs.subscribe((re

我试图创建一个行为类似于
defer
返回的可观察对象,但使用
create
方法。所以我试着:

const obs = Observable.create(function(observer) {
   from(fetch('https://jsonplaceholder.typicode.com/todos/1').then(console.log('fetch done'))).subscribe(observer)
})

setTimeout(()=>obs.subscribe((resp)=>console.log(resp.statusText)), 5000)
但当我在
节点中运行它时,它只打印“fetchdone”(订阅时,如预期的5秒后),但会一直在那里等待

当我在
setImmediate()
setTimeout(,0)
中包装来自(…)
时,有时它会打印两条消息(“Fetch done”,“OK”)并退出,有时它只打印“Fetch done”并永远等待。

代码:


为什么会发生这种情况?我做错了什么?

第一件事是
可观察。create
已被弃用,您应该只使用
新可观察()

在创建这样的观察对象时,您可以访问
observer
对象,在该对象中可以调用
next()
complete()
,因此在您的情况下如下所示:

new Observable(observer => {
  fetch('https://jsonplaceholder.typicode.com/todos/1').then(response => {
    observer.next(response);
    observer.complete();
  });
});
我认为这也应该奏效:

new Observable(observer => {
  const sub =  from(fetch('https://jsonplaceholder.typicode.com/todos/1')).subscribe(observer);
  // Return tear-down function so you can abort request.
  return () => sub.unsubscribe();
});

显然,这太复杂了,如果你只想用Observable包装一个承诺,你可以只使用
from()

承诺。然后接受一个回调函数,你需要返回参数来链接它,所以它变成
然后(result=>{console.log('fetch done',result);return result;})

,这是正确的!修复此问题后,无需使用
setTimeout
/
setImmediate
new Observable(observer => {
  const sub =  from(fetch('https://jsonplaceholder.typicode.com/todos/1')).subscribe(observer);
  // Return tear-down function so you can abort request.
  return () => sub.unsubscribe();
});