离开页面时异步

时间:2016-08-07 18:39:36

标签: dart async-await dart-html

我在元素上有一个onClick处理程序。处理程序验证数据并通过异步函数将其保存到本地数据存储。简化代码:

main () async {
  Future validateAndSaveData(Event e) async {
    Map inputData = {};
    var inputs = querySelectorAll("input, select");
    for (var input in inputs){
      inputData[input.id] = input.value;
    }
    var error = currentPage.validate(inputData);
    //e.preventDefault();
    if (error.isEmpty){
      try {
        await currentPage.saveSurvey(inputData);
      } catch (e){
        print (e);
      }
    } else {
      currentPage.handleErrors(error);
      e.preventDefault();
    }
    print ("after validation/save");
  }

  querySelector("#next")
    ..onClick.listen(validateAndSaveData);
}

如果执行代码,则从不执行打印(“验证/保存后”),并且不保存数据。如果我取消注释e.preventDefault(),则保存数据并执行打印。

看来该页面在等待完成之前就已经存在。

如何确保await currentPage.saveSurvey(inputData)行完成?

在Ubuntu上的Dartium下运行Dart 1.18.1。

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的其他人,我最终将元素更改为

<button id="next" data-next-page="station/1" class="btn btn-primary pull-right">Next</button>

并将此行添加到validateAndSaveData例程的末尾。

window.location.assign((e.target as ButtonElement).dataset["next-page"]);