В прост асинхронен случай манипулаторът може да изглежда така:
@tornado.web.authenticated
@tornado.web.asynchronous
def post(self):
AsyncHTTPClient().fetch("http://api.example.com/", self.on_post_response)
def on_post_response(self, response):
self.render("template.html", status=response.error)
Въпреки това стигнах до момент, когато трябва да изпълня две асинхронни операции (извличане на API за отдалечен остатък и след това изпращане на имейл с резултатите), преди да се върна към клиента.
Чудя се дали има "вграден" начин да направите това, напр. чрез добавяне на обратни извиквания към опашка (като ioloop.add_callback
) или трябва да съставя персонализиран обект, който ще управлява тези задачи и тяхното състояние и ще го извика от post
.