Dart:在 IE11 中提交表单时,preventDefault() 在异步回调中不起作用

Dart: preventDefault() not working in asynchronous callback when submitting form in IE11

我在 IE11 中提交表单时遇到 Event.preventDefault() 问题。出于某种原因,它不会阻止浏览器在使用 async 回调时刷新。

HTML:

<form id="login">
  <input type="email" id="email" placeholder="Email">
  <input type="password" id="password" placeholder="Password">
  <input type="submit" value="SUBMIT">
</form>

飞镖:

void main() {
  FormElement form = querySelector('form#login');
  form.onSubmit.listen((Event e) async {
    e.preventDefault();
    // send login request
  });
}

但是,如果我删除 async 关键字,它 阻止浏览器刷新。我在这里错过了什么吗,我没想到它会这样?在 Chrome 中,它在有和没有 async 的情况下都有效。

这看起来像是一个错误。请在这里 https://github.com/dart-lang/sdk/issues/new 提交,我们会查看。

我在 GitHub 的 dart-lang/sdk 存储库上创建了一个 issue,似乎 IE11 只是执行异步回调有点晚了 e.preventDefault() 才能生效.所以我把表单提交的所有回调都改成同步的,这样就马上执行了。

在某些情况下,到处都是 .then() 看起来相当混乱,所以我改为在内部定义一个异步函数,以便我可以使用 await.

飞镖:

void main() {
  FormElement form = querySelector('form#login');
  form.onSubmit.listen((Event e) {
    e.preventDefault();
    _asyncWrap() async {
      // send login request
    }
    _asyncWrap();
  });
}