Coffee VampireC
Denoβ€’9mo ago
Coffee Vampire

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);
        }
      }
Was this page helpful?