[Dart]Futureを返す関数

Dartで標準で用意されているメソッドはFutureを返すものがある。

これは遅延を伴う処理を、無駄なく行うための重要な機構だ。

というわけで自分のメソッドもFutureを返すようにしたいのだが、
そのやり方は下記の通り。

Future<chartdata> httpAccessTest() {
 Completer comp = new Completer();
  
  HttpRequest.request("http://..../xxx")
  .then( (HttpRequest req) {
    // 成功した時
    comp.complete(req.responseText);
  })
  .catchError( (e) => comp.completeError(e) ); // 失敗した時
    
  return comp.future;
}

これはhttpでデータを取得するサンプルだ。
Completerオブジェクトを使用するのがミソ。
っていうか、それしかないが。

正常終了の結果はcompleteメソッドで通知。
エラーは、completeErrorメソッドを使用して通知。サンプルでは元の処理でThrowされているものをそのまま転送している。

ちなみに、Completerが使えるのは一回こっきりだ。使い回しはできない。

Futureの使い方
http://www.dartlang.org/articles/using-future-based-apis/
Futureのエラーハンドリング方法
http://www.dartlang.org/articles/futures-and-error-handling/

コメント

このブログの人気の投稿

nginxでlocalhostとしてアクセスをサーバーに転送する方法

Android・・・テキスト描画あれこれ, ascent(), descent()等

Android:stateに応じてTextの色を変更する・・・ColorStateList