diff --git a/src/js/node/http.ts b/src/js/node/http.ts index c3707cc726..c6ec3c2d14 100644 --- a/src/js/node/http.ts +++ b/src/js/node/http.ts @@ -337,7 +337,7 @@ class Agent extends EventEmitter { function emitListeningNextTick(self, onListen, err, hostname, port) { if (typeof onListen === "function") { try { - onListen(err, hostname, port); + onListen.$apply(self, [err, hostname, port]); } catch (err) { self.emit("error", err); } diff --git a/test/js/node/http/node-http.test.ts b/test/js/node/http/node-http.test.ts index e3cd7bae96..1fd90e0927 100644 --- a/test/js/node/http/node-http.test.ts +++ b/test/js/node/http/node-http.test.ts @@ -140,6 +140,21 @@ describe("node:http", () => { listenResponse.close(); }); + it("listen callback should be bound to server", async () => { + const server = createServer(); + const { resolve, reject, promise } = Promise.withResolvers(); + server.listen(0, function () { + try { + expect(this === server).toBeTrue(); + resolve(); + } catch (e) { + reject(); + } + }); + await promise; + server.close(); + }); + it("option method should be uppercase (#7250)", async () => { try { var server = createServer((req, res) => {