Tornado の RequestHandler に get_current_user を実装しようとしていますが、データベースへの非同期呼び出しを待機している間に呼び出しをブロックする必要があります。@tornado.web.asynchronous で呼び出しを装飾しても機能しません。どちらの方法でも、非同期クエリが完了してクエリ コールバックが実行される前に get_current_user メソッドが返されるためです。
例えば:
class MyHandler(BaseHandler):
@tornado.web.asynchronous
@tornado.web.authenticated
def get(self):
self.write('example')
self.finish()
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
def query_cb(self, doc):
return doc or None
database.get(username='test', password='t3st', callback=query_cb)
@tornado.web.authenticated は get_current_user を呼び出しますが、BaseHandler には応答する時間がないため、常に "None" を受け取ります。トルネードを使用して、上記のような通話を一時的にブロックする方法はありますか?