我在元素上有一个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。
答案 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"]);