summaryrefslogtreecommitdiff
path: root/cli/tools/repl
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-11-22 03:45:34 +0100
committerGitHub <noreply@github.com>2023-11-22 03:45:34 +0100
commita8c24d2a8b794eec343a518614cbca0a87b9e2fb (patch)
tree383562e2165e247eb15728f27412764c78c7821d /cli/tools/repl
parentcc5d6df50b3e5a755bdec884ec78dc005e97b5a2 (diff)
fix: 'Promise was collected' error in REPL/jupyter (#21272)
Fixes #20528
Diffstat (limited to 'cli/tools/repl')
-rw-r--r--cli/tools/repl/session.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs
index b46f73d5a..0a0dd6648 100644
--- a/cli/tools/repl/session.rs
+++ b/cli/tools/repl/session.rs
@@ -38,6 +38,7 @@ use deno_core::serde_json;
use deno_core::serde_json::Value;
use deno_core::unsync::spawn;
use deno_core::LocalInspectorSession;
+use deno_core::PollEventLoopOptions;
use deno_graph::source::ResolutionMode;
use deno_graph::source::Resolver;
use deno_graph::Position;
@@ -200,10 +201,15 @@ impl ReplSession {
let mut session = worker.create_inspector_session().await;
worker
+ .js_runtime
.with_event_loop(
session
.post_message::<()>("Runtime.enable", None)
.boxed_local(),
+ PollEventLoopOptions {
+ wait_for_inspector: false,
+ ..Default::default()
+ },
)
.await?;
@@ -291,7 +297,17 @@ impl ReplSession {
) -> Result<Value, AnyError> {
self
.worker
- .with_event_loop(self.session.post_message(method, params).boxed_local())
+ .js_runtime
+ .with_event_loop(
+ self.session.post_message(method, params).boxed_local(),
+ PollEventLoopOptions {
+ wait_for_inspector: false,
+ // NOTE(bartlomieju): this is an important bit; we don't want to pump V8
+ // message loop here, so that GC won't run. Otherwise, the resulting
+ // object might be GC'ed before we have a chance to inspect it.
+ pump_v8_message_loop: false,
+ },
+ )
.await
}