2024-06-02 06:20:57 发布
网友
我有一个简单的处理程序:
@asynchronous @gen.engine def post(self): result = functionOne() foo = MyObject() bar = AnotherObject()
但我希望结果返回,然后执行foo,然后在一个序列中执行bar。我尝试过按照http://www.tornadoweb.org/documentation/gen.html使用嵌套回调,但没有多少运气。在
谢谢!在
您正在使用发电机发动机,但您需要使用gen.Task调用将方法调用变成yield。在
gen.Task
yield
我的一个项目的例子:
customer = yield gen.Task( self.paymentService.charge, email, cardUri ) sub = yield gen.Task( self.paymentService.schedule, customer )
上面的代码将首先执行charge部分,然后返回结果,然后调用schedule并从该调用中返回{}对象。在
charge
schedule
使用gen.Task调用的方法需要如下所示:
其中callback将是要调用的函数,以实际返回gen.Task中的值。在
callback
我把它设置为使用或不使用回调,这样我可以更轻松地测试我的方法。这只是一个简单的测试,如果callback是否为None,如果不是{},那么它将被调用,否则它将正常返回。在
None
gen.Engine Docs
编辑:
好的,为了澄清上面的问题,一个与gen.Tasks一起工作的完整函数如下所示。在
gen.Tasks
def delete_customer( customer_id, callback ): result = customerService.delete( customer_id ) callback( result )
上面的内容在gen.Task中使用时如下所示。在
@gen.engine def perform_customer_delete( customer_id ) result = yield gen.Task( delete_customer, customer_id ) return result
这意味着用参数customer_id调用delete_customer,然后我希望这个函数的结果,返回值,被赋予result。因此,当delete_customer函数完成并将self.customerService.delete的result发送给callback,gen.Task将返回该值并将其存储在result中。在
customer_id
delete_customer
result
self.customerService.delete
现在,您可以随意使用result,在我的示例中,它是返回的。在
对于您的例子,看起来您希望执行以下操作。在
@asynchronous @gen.engine def post(self): result = yield gen.Task( functionOne ) foo = yield gen.Task( MyObject ) bar = yield gen.Task( AnotherObject )
这将首先调用functionOne,然后转到下一个gen.Task,并执行MyObject,依此类推。但是,为了正确使用callback参数,必须遵循这种模式,否则无法返回结果。在
functionOne
MyObject
这就是我的第二个令人困惑的例子的作用。在
为了绕过这个要求,并允许我的代码可以使用gen.Task而不需要我执行以下操作。在
def delete_customer( customer_id, callback=None ): result = customerService.delete_customer( customer_id ) if callback: callback( result ) return result
这使我可以在更多的情况下使用代码而不会出现中断。在
您正在使用发电机发动机,但您需要使用
gen.Task
调用将方法调用变成yield
。在我的一个项目的例子:
上面的代码将首先执行}对象。在
charge
部分,然后返回结果,然后调用schedule
并从该调用中返回{使用
^{pr2}$gen.Task
调用的方法需要如下所示:其中
callback
将是要调用的函数,以实际返回gen.Task
中的值。在我把它设置为使用或不使用回调,这样我可以更轻松地测试我的方法。这只是一个简单的测试,如果},那么它将被调用,否则它将正常返回。在
callback
是否为None
,如果不是{gen.Engine Docs
编辑:
好的,为了澄清上面的问题,一个与
gen.Tasks
一起工作的完整函数如下所示。在上面的内容在
gen.Task
中使用时如下所示。在这意味着用参数
customer_id
调用delete_customer
,然后我希望这个函数的结果,返回值,被赋予result
。因此,当delete_customer
函数完成并将self.customerService.delete
的result
发送给callback
,gen.Task
将返回该值并将其存储在result
中。在现在,您可以随意使用
result
,在我的示例中,它是返回的。在对于您的例子,看起来您希望执行以下操作。在
这将首先调用
functionOne
,然后转到下一个gen.Task
,并执行MyObject
,依此类推。但是,为了正确使用callback
参数,必须遵循这种模式,否则无法返回结果。在这就是我的第二个令人困惑的例子的作用。在
为了绕过这个要求,并允许我的代码可以使用
gen.Task
而不需要我执行以下操作。在这使我可以在更多的情况下使用代码而不会出现中断。在
相关问题 更多 >
编程相关推荐