Skip to content

Looks like abortEarly doesn't abort async parsing #954

Open
@victordidenko

Description

In the following code I expect that parsing will be stopped right away, because email field is not valid, and abortEarly is set to true. But parsing awaits for the whole 10 seconds before returning result.

Ideally I expect that promise will not be even started in that case.

And the related question:
Is there a way to abort running promise? Using AbortController or something?

import * as v from 'valibot';

const Schema = v.objectAsync({
  email: v.pipe(v.string(), v.trim(), v.email()),
  username: v.pipeAsync(
    v.string(),
    v.nonEmpty(),
    v.maxLength(30),
    v.checkAsync(() => new Promise((res) => {
      console.log('request');
      setTimeout(() => res(true), 10000)
    }))
  ),
});

const result = await v.safeParseAsync(Schema, {
  email: '',
  username: 'qwerty',
}, {
  abortEarly: true,
  abortPipeEarly: true,
});

console.log(result);

https://valibot.dev/playground/?code=JYWwDg9gTgLgBAKjgQwM5wG5wGZQiOAcg2QBtgAjCGQgbgCh6BjCAO1XgGUmALAUxDI4AXkwA6CBQBWfJjACCqAJ6smACgDe9OHAHJgpAFziwwMHzUYxHKMFYBzNQEoANOJi2Qzt1b0HnrtpwAK6ofFCsyCB8xlam5ooq6kE6VjZ2joE6qWKsbACi4DBK3iniggAeADJ8DjA8agDMAAxZ2Va8sgDWiapqziIAfHCsfADucAAKeCDAYf1QfKhOQ3Ba2dks7BCkfGKkEI6EiwCOwUs0TgwbOmEwACqgfBDBMP0rwsOLqGoe565wACMzRBrTKAF8nE4goFIQxmGwOHBvsFSPBRMgxvp4GlkNg+JNkFAwr11Nx+II3OtdIIDMZCIQXEFQuFItF6ScxuFioz6OCqUFkFRYPkiaQlMY-nwmTohdAYJMzHxRVBxZKoOcmXDGFtUDs9gdHCi0Vd6EA

Metadata

Assignees

Labels

enhancementNew feature or requestpriorityThis has priority

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions