A render_GET
Verfahren kann kein Deferred
zurückzukehren. Es kann nur eine Zeichenfolge oder NOT_DONE_YET
zurückgegeben werden. Jede mit inlineCallbacks
dekorierte Methode gibt Deferred
zurück. Also, dekorieren Sie nicht render_GET
mit inlineCallbacks
.
Natürlich hält Sie nichts davon ab, eine andere gewünschte Funktion in render_GET
aufzurufen, einschließlich einer, die eine Deferred
zurückgibt. Werfen Sie einfach die Deferred
weg anstatt es von render_GET
(natürlich, stellen Sie sicher, dass die Deferred
nie mit einem Fehler ausgelöst wird, oder durch Wegwerfen Sie möglicherweise einige Fehler Berichterstattung fehlen ...).
So zum Beispiel:
@inlineCallbacks
def _renderContacts(self, request):
contacts = yield Contact.find()
for c in contacts:
request.write(c.name)
if not request.finished:
request.finish()
def render_GET(self, request):
self._renderContacts(request)
return NOT_DONE_YET
ich zumindest empfehlen einen Blick auf txyoga und klein zu nehmen, wenn Sie gehen mit Verdrehte tun jede ernsthafte Web-Entwicklung werden. Selbst wenn Sie sie nicht verwenden möchten, sollten sie Ihnen einige gute Ideen geben, wie Sie Ihren Code strukturieren und verschiedene allgemeine Aufgaben wie diese ausführen können.
Danke für das Beispiel @schlamar, aber es funktioniert nicht. Das wirft "Fehler, der eine Zeichenfolge nicht zurückgegeben hat" Fehler. – user2043932
@ user2043932 Können Sie den vollständigen Stacktrace posten? (z. B. auf http://gist.github.com/) – schlamar
@ user2043932 Bearbeitete meine Antwort. – schlamar