summaryrefslogtreecommitdiff
path: root/cli/js/net.ts
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-04-29 01:08:02 +0200
committerGitHub <noreply@github.com>2020-04-29 01:08:02 +0200
commit640f6878f61204bf7211cd9f0750b3ab6dee57b8 (patch)
tree0339398a002ae8331cae1007ffb99dde701999b1 /cli/js/net.ts
parent6fd754fba06ab3e3c4447fe118e780aa5040a419 (diff)
refactor: Deno.listener closes when breaking out of async iterator (#4976)
Diffstat (limited to 'cli/js/net.ts')
-rw-r--r--cli/js/net.ts31
1 files changed, 20 insertions, 11 deletions
diff --git a/cli/js/net.ts b/cli/js/net.ts
index 962c78a5b..b06a4189a 100644
--- a/cli/js/net.ts
+++ b/cli/js/net.ts
@@ -61,21 +61,30 @@ export class ListenerImpl implements Listener {
return new ConnImpl(res.rid, res.remoteAddr, res.localAddr);
}
+ async next(): Promise<IteratorResult<Conn>> {
+ let conn: Conn;
+ try {
+ conn = await this.accept();
+ } catch (error) {
+ if (error instanceof errors.BadResource) {
+ return { value: undefined, done: true };
+ }
+ throw error;
+ }
+ return { value: conn!, done: false };
+ }
+
+ return(value?: Conn): Promise<IteratorResult<Conn>> {
+ this.close();
+ return Promise.resolve({ value, done: true });
+ }
+
close(): void {
close(this.rid);
}
- async *[Symbol.asyncIterator](): AsyncIterableIterator<Conn> {
- while (true) {
- try {
- yield await this.accept();
- } catch (error) {
- if (error instanceof errors.BadResource) {
- break;
- }
- throw error;
- }
- }
+ [Symbol.asyncIterator](): AsyncIterableIterator<Conn> {
+ return this;
}
}