From 320b7f5c9bb3354dbcfa02aaaf9ef45e5b10912b Mon Sep 17 00:00:00 2001 From: Dmitry Vasilev Date: Thu, 6 Jul 2023 21:23:06 +0300 Subject: [PATCH] fix bug with instanceof Promise check --- src/record_io.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/record_io.js b/src/record_io.js index 483a912..68d2b04 100644 --- a/src/record_io.js +++ b/src/record_io.js @@ -119,6 +119,8 @@ const make_patched_method = (original, name, use_context) => { }) } } else { + // IO trace replay + const call = cxt.io_trace[cxt.io_trace_index] // TODO if call == null or call.type == 'resolution', then do not discard @@ -197,7 +199,10 @@ const make_patched_method = (original, name, use_context) => { cxt.io_trace_index++ if(call.ok) { - if(call.value instanceof cxt.window.Promise) { + // Use Symbol.toStringTag for comparison because Promise may + // originate from another window (if window was reopened after record + // trace) and instanceof would not work + if(call.value?.[Symbol.toStringTag] == 'Promise') { // Always make promise originate from run_window return new cxt.window.Promise(resolve => { cxt.io_trace_resolvers.set(cxt.io_trace_index - 1, resolve)