mirror of
https://github.com/denoland/deno.git
synced 2025-09-26 12:19:12 +00:00
refactor: Deno.listener closes when breaking out of async iterator (#4976)
This commit is contained in:
parent
6fd754fba0
commit
640f6878f6
2 changed files with 56 additions and 11 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue