【发布时间】:2016-05-30 14:00:24
【问题描述】:
我想做一个 GET 请求来检查返回码是否符合我的预期。该请求发生在由通用延迟链的 addCallback 调用的函数内部,如下面的代码所示。
我的具体问题是:如何使-D-线的返回到达-E-线?
似乎从未调用回调函数“cbResponse”(行-D-)。我的第一次尝试是执行请求并将请求的结果返回到回调链(行-A-)。它失败了,因为 deferr 对象没有属性结果。 第二次尝试(行-B-)是返回延迟对象本身。它也不返回结果。 第三次尝试(-C-行),什么都返回,但显然没有请求的响应代码。
非常感谢!
from twisted.web.client import Agent
from twisted.web.http_headers import Headers
from twisted.internet import reactor, defer
class Test (object):
@classmethod
def getRequest (self, result):
print "Function getRequest"
agent = Agent(reactor)
d2 = agent.request('GET',
'http://www.google.com',
Headers({'User-Agent': ['Twisted Web Client Example']}),
None)
d2.addCallback(Test.cbResponse)
# 1 st attempt: return the result of d2. Fail: exceptions.AttributeError: Deferred instance has no attribute 'result'
return d2.result # --> line A
# 2nd attempt: return only the deferr object d2. Don't fail, but I can't get the result of the above request
### return d2 # --> line B
# 3rd attemp: return None (without return).
# --> line C
@classmethod
def cbResponse(response):
print 'Function cbResponse %s', response.code
# This is the return value I want to pass back to deferredChain function (called at line E)
return response.code # line --> D
@classmethod
def deferredChain(self):
d = defer.Deferred()
d.addCallback(Test.getRequest) # line --> E
d.callback("success")
return d.result # line --> F
if __name__ == '__main__':
tst = Test()
rtn = tst.deferredChain()
print "RTN: %s " % rtn
【问题讨论】:
-
请改写问题,因为不清楚什么是问题,什么是问题。
-
对不起@pinturic,我做了调整。请看看现在是否清楚。