Я пытаюсь создать наблюдаемое с поведением, аналогичным тому, которое возвращает 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)
Но когда я запускаю его в node
Он просто печатает "fetch done" (по подписке, через 5 секунд, как и ожидалось), но ждет там вечно.
Когда я обертываю from(..)
в setImmediate()
или setTimeout(,0)
, то иногда он печатает оба сообщения («Fetch done», «OK») и выходит, а иногда он печатает только «fetch done» и ждет вечно.
код:
const obs = Observable.create(function(observer) {
setTimeout(()=>from(fetch('https://jsonplaceholder.typicode.com/todos/1').then(console.log('fetch done'))).subscribe(observer), 0)
})
setTimeout(()=>obs.subscribe((resp)=>console.log(resp.statusText)), 5000)
Почему это происходит? Что я делаю не так?