Coffee Vampire
Coffee Vampire
DDeno
Created by Coffee Vampire on 4/29/2025 in #help
Do exceptions escape for await blocks?
I have an issue that seems to be an exception escaping my async iterator, could anyone verify if this is indeed something that escapes the environment if I try to rethrow in for await block?
try {
await socket.waitForMessage("StreamBeginMessage");

const messageStream = {
[Symbol.asyncIterator]() {
return {
async next() {
if (!socket.isOpen()) {
return { done: true, value: undefined };
}

try {
const result = await socket.waitForMessageOrCancellation([
"StreamContentMessage",
"StreamFinishMessage",
]);

if (result.type === "StreamFinishMessage") {
return { done: true, value: result.message };
}

return { done: false, value: result.message };
} catch (error) {
if (error instanceof CancellationError) {
return { done: true, value: undefined };
}
throw error; //< --- Seems to be problem
}
},
};
},
};

for await (const message of messageStream) {
if (message && message.name === "StreamContentMessage") {
onContent(message.content);
}
}
try {
await socket.waitForMessage("StreamBeginMessage");

const messageStream = {
[Symbol.asyncIterator]() {
return {
async next() {
if (!socket.isOpen()) {
return { done: true, value: undefined };
}

try {
const result = await socket.waitForMessageOrCancellation([
"StreamContentMessage",
"StreamFinishMessage",
]);

if (result.type === "StreamFinishMessage") {
return { done: true, value: result.message };
}

return { done: false, value: result.message };
} catch (error) {
if (error instanceof CancellationError) {
return { done: true, value: undefined };
}
throw error; //< --- Seems to be problem
}
},
};
},
};

for await (const message of messageStream) {
if (message && message.name === "StreamContentMessage") {
onContent(message.content);
}
}
1 replies