0

次のコードは、openCursor の新しい処理として投稿されました。次のコードが現在機能するかどうか (Dart r18915)、「値」変数とは何ですか?

store.openCursor(autoAdvance: true).listen(
    (cursor) => values.add(onCursor(cursor)),
    onDone: () => completer.complete(values),
    onError: (e) => completer.completeError(e));
return completer.future;
4

1 に答える 1

0

あなたのonCursor()関数が何をしているのか/何を呼び出しているのかわかりません。あなたの値の変数はリストであると仮定しています。

私も似たようなことをしていますが、フューチャ/コンプリータの代わりにコールバックを使用しています。ここには小さな関数フラグメントしかありません。うまくいけばいくつかの詳細を追加するために、いくつかをフラッシュします。

// Accept the indexeddb Database, and return a future which
// will provide the list of values from 'someKey'
Future<List<String>> getSomeKeyValues(Database db) {
  var values = new List<String>();
  var completer = new Completer();

  var store = db.transaction('DB_STORE', 'readwrite').objectStore('DB_STORE');
  store.openCursor(autoAdvance: true).listen((cursor) {
      if(cursor != null && cursor.value != null) {
        // Note cursor.value is actually a Map<String, String> 
        // of collection's key and value
        values.add(cursor.value['someKey']); // get the value key 'someKey'
      }
    }, onDone: () => completer.complete(values),
    onError: (e) => completer.completeError(e));

  return completer.future;
}

次に、この関数を次のように呼び出します。

getSomeKeyValues(myDatabase).then((results) {
  for(var value in results) {
    print(value);
  }
}
于 2013-02-27T14:24:38.320 に答える