2013-01-02 4 views
5

Die Google App Engine NDB Dokumentation für Karte() heißt es: "Alle Abfrageoptionen Schlüsselwort-Argumente unterstützt werden"NDB Karte (Rückruf, produces_cursors = True)

Allerdings habe ich versucht, produces_cursors=True auf map() zu verwenden, und ich bin nicht einen Cursor zurück zu bekommen.

map(callback, pass_batch_into_callback=None, merge_future=None, **q_options) 

Ich möchte map() verwenden, wie ich den Rückruf zu einer Tasklet einstellen.

https://developers.google.com/appengine/docs/python/ndb/queryclass#kwdargs_options

bearbeiten - Bereitstellung von Codebeispiel:

@ndb.tasklet 
def callback(user): 
    statistics = yield ndb.Key(Statistics, user.key.id()).get_async() 
    raise ndb.Return(user, statistics) 

result = User.query().map(callback, produces_cursors=True) 
+0

Können Sie ein Code-Snippet bereitstellen? – bossylobster

+0

Sure @bossylobster, ich habe einige Beispielcode hinzugefügt. – Chris

+0

In der Tat haben Sie Recht, 'taclets.MultiFuture' gibt nur eine Liste zurück (http://code.google.com/p/appengine-ndb-experiment/source/browse/ndb/tasklets.py?r=437f5437d9fba7b1c470d56ed2fdf5633d406730#562) und 'map_query' behält keine der Cursor-Informationen bei. – bossylobster

Antwort

4

Das Beispiel scheint einen Tippfehler zu haben - die richtige Flagge produce_cursors ist, nicht produces_cursors.

Cursor werden jedoch nur zur Verfügung gestellt, wenn Sie einen Iterator verwenden, nicht mit map(). Sehen Sie sich das Beispiel für asynchrone Iteratoren an. Es ist ein bisschen Arbeit, aber Sie können es definitiv verwenden, um manuell ein Tasklet für jedes Ergebnis zu erstellen.