Когда наблюдаемая подписка rxjs выполняется синхронно? - PullRequest
1 голос
/ 19 сентября 2019

При указанном ниже кодовом блоке

let ob = of(1,2,3);
ob.subscribe((v)=>{
   console.log(v)
})
console.log("end")

значения выводятся синхронно.Гарантируется ли выполнение функции подписки перед печатью end?поэтому вывод всегда будет.

1
2
3
end

Ответы [ 3 ]

2 голосов
/ 19 сентября 2019

если ваш наблюдаемый поток выполняет только код синхронизации, да, это точно так же, как синхронное выполнение обычного выполнения функции, но если он асинхронный, он будет выполняться асинхронно, тогда как обещание всегда будет выполняться асинхронно

Асинхронная версия вашегокод будет что-то вроде

let ob = of(1,2,3).pipe(mergeMap(num=>timer(0),_=>num);
ob.subscribe((v)=>{
   console.log(v)
})
console.log("end")
1 голос
/ 19 сентября 2019

Нет, если наблюдаемое излучает позже

const { BehaviorSubject } = rxjs;

let bs$ = new BehaviorSubject(1);

setTimeout(() => { bs$.next(2); }, 500);
setTimeout(() => { bs$.next(3); }, 1000);

bs$.subscribe(v => {
   console.log(v)
});

console.log('end');
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script>
0 голосов
/ 19 сентября 2019

Наблюдаемые значения Stream of Data, а не async functions.выполняется синхронно и зависит от логики, в которой он вызывается. Он вызывает следующий метод синхронно, один или много раз (как оператор of) или асинхронный, как если вы вызываете метод next внутри функции SetTimeout.

...