mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-13 21:14:28 -08:00
record io
This commit is contained in:
73
record_io/timelime
Normal file
73
record_io/timelime
Normal file
@@ -0,0 +1,73 @@
|
||||
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
|
||||
Reference in New Issue
Block a user