mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-13 13:04:30 -08:00
74 lines
2.0 KiB
Plaintext
74 lines
2.0 KiB
Plaintext
Timeline Replay
|
||
|
||
call a() call a()
|
||
resolve a()
|
||
|
||
call b()
|
||
resolve b()
|
||
|
||
call c()
|
||
resolve c()
|
||
|
||
|
||
Timeline Replay
|
||
|
||
resolution_index = 0, io_index = 0
|
||
|
||
call a() call a: return promise
|
||
compare resolutions[resolution_index] with io_index
|
||
io_index < resolutions[0]
|
||
do not resolve
|
||
io_index++
|
||
|
||
call b() call b: return promise
|
||
compare resolutions[0] && io_index
|
||
io_index < resolutions[0]
|
||
do not resolve
|
||
|
||
call c() call c: return promise
|
||
|
||
resolve c()
|
||
resolve b()
|
||
resolve a()
|
||
|
||
|
||
resolutions: [
|
||
3,
|
||
2,
|
||
1,
|
||
]
|
||
|
||
Делаем реплей. К нам приходят события - вызовы функций. Мы перехватываем вызов, возвращаем промис, и ресолвим тот промис, который сейчас надо заресолвить. Например, в примере выше мы ресолвим a() после вызова с(). А b() ресолвим после ресолва с(). То есть мы можем ресолвить несколько за раз.
|
||
|
||
|
||
|
||
Record: [
|
||
call a
|
||
resolve a
|
||
call b
|
||
resolve b
|
||
]
|
||
|
||
Replay: [
|
||
|
||
call a
|
||
смотрим что возвращается промис, взводим ресолвер
|
||
|
||
ресолвер сработал
|
||
resolve a
|
||
|
||
call b
|
||
смотрим что возвращается промис, взводим ресолвер
|
||
|
||
ресолвер сработал
|
||
resolve b
|
||
]
|
||
|
||
|
||
|
||
|
||
|
||
|
||
call
|
||
resolve
|