2016-08-07 14 views
0

私は要素に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()のコメントを外すと、データが保存され、印刷が実行されます。

待機が完了する前にページが残っているようです。

currentPage.saveSurvey(inputData)行の待機を確実にするにはどうすればよいですか?

UbuntuのDartiumでDart 1.18.1を実行しています。この問題を持つ他の誰のために

+0

私はできないと思います。 AFAIKこれはブラウザの制限であり、Dartには関係しません。ページが残っていれば、イベントキューは処理されず、 'saveSurvey()'が完了したときに 'await'の後のコードがエンキューされて実行されます。 –

答えて

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"]); 
関連する問題