Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rxjs asapscheduler的执行顺序_Rxjs_Rxjs6_Rxjs Observables_Rxjs Pipeable Operators_Rxjs Marbles - Fatal编程技术网

rxjs asapscheduler的执行顺序

rxjs asapscheduler的执行顺序,rxjs,rxjs6,rxjs-observables,rxjs-pipeable-operators,rxjs-marbles,Rxjs,Rxjs6,Rxjs Observables,Rxjs Pipeable Operators,Rxjs Marbles,考虑到我有以下代码: let Rx=window['rxjs']; 常数, 队列调度器, 作为调度员, 异步调度程序, animationFrameScheduler }=Rx; const{observeOn,tap}=Rx.operators; console.clear(); 让source$=of(1,2,3,asapScheduler).pipe( 轻触((v)=>{ 控制台日志('tap',v); }), ) source$.subscribe((v)=>{ console.log

考虑到我有以下代码:

let Rx=window['rxjs'];
常数,
队列调度器,
作为调度员,
异步调度程序,
animationFrameScheduler
}=Rx;
const{observeOn,tap}=Rx.operators;
console.clear();
让source$=of(1,2,3,asapScheduler).pipe(
轻触((v)=>{
控制台日志('tap',v);
}),
)
source$.subscribe((v)=>{
console.log('Value',v);
Promise.resolve()然后(()=>{
console.log('Microtask value',v);
});
});

据我所知,RxJS倾向于使用独立的调度器。它的工作原理与预期一致:

let source$ = of(1, 2, 3).pipe(
    tap((v) => {
        console.log('tap ', v);
    }),
)

source$.subscribe((v) => {
    asapScheduler.schedule(() => console.log('Value ', v));
    asyncScheduler.schedule(() => Promise.resolve().then(() => {
        console.log('Microtask value ', v);
    }))
})
另一种意思是,如果您在您的可观察对象中使用
调度程序
,比如(…,asapScheduler)
,-它会获取您的可观察对象的完整路径流,从创建到订阅结束,并尝试尽快调用它。在您的微任务示例中,它看起来是合理的。

所涉及的步骤:

  • of根据调度程序发出第一个值(本例中的下一个宏任务)
  • 它将下一个值放入调度程序队列(微任务)
  • 对于下一次排放,重复步骤1和2
  • 控件打印当前宏任务

    1.)tap1和 价值1

    按照第二步,, 2.)tap2和value2 执行并完成所有挂起的asap和异步任务,如下所示

    3.)微任务值1和微任务值2

    按照第三步,

    它再次遵循以下第一步:

    4.)轻触3并选择值3

    按照第二步, 执行tap4和value4并完成所有挂起的asap和异步任务,如下所示:

    微任务值3 微任务值4


    要深入研究,请参考此

    您能解释一下执行流程吗?我已经更新了问题。每一次发射都像一个承诺一样工作吗(在内部尽快)?因为你在流程中使用调度程序,它会尽快完成微任务,即使不是所有的宏任务都完成了。我真的不明白。如果您能在回答中解释流程,那就太好了。如果它试图尽快完成,为什么在打印tap1和value1之后不打印微任务值1和微任务值2?