当ASI-HTTP-Request超时时,调用哪个委托方法?

4

我有一个使用ASI-HTTP-Request处理大文件的应用程序,最近一位测试人员注意到他们观察到非常长的加载延迟,应该表现为超时。我已经连接了请求失败的委托方法,但似乎这些方法并没有发生。

我仔细阅读了他们的文档,但没有看到任何具体的内容。

1个回答

9
ASIHTTPRequest.m文件中,查找-checkRequestStatus方法。 当出现超时时,请求将失败并显示ASIRequestTimedOutError错误类型。
[self failWithError:ASIRequestTimedOutError];

所以你应该能够在委托的-requestFailed:方法中检查返回的错误:

- (void)requestFailed:(ASIHTTPRequest *)request {
    NSLog(@"Error: %@",[[request error] localizedDescription]);
}

阅读源代码有助于了解其工作原理。文档很好,但并不总是与源代码同步。


谢谢。我对HTTP本身并不了解...我想问一下...如果我有一个5MB大小的文件,并且我的请求超时时间设置为10秒,在10秒钟内它只加载了3MB...这是否算超时? - M. Ryan
2
不,超时计时器是在数据传输的间隙中无数据到达后开始的。如果下载3MB需要10秒钟,然后请求一直等待,等待,等待,但是没有更多的数据传入...这就是超时计时器开始计时的时候。所以在这个例子中,从请求开始到超时错误发生需要20秒钟。 - Alex Reynolds
那么我该怎么说“好的,即使有数据进来,这也需要愚蠢地很长时间”……除了自己创建NSTimer之外……虽然我可以这样做,但我想知道ASI是否提供了内置解决方案。 - M. Ryan
1
我看不到任何内置的方法,但是你可以轻松地利用ASIHTTPRequest中现有的值,而不是创建自己的NSTimer实例,不断累加secondsSinceLastActivity属性以生成自定义的overallActivityTime属性。在-checkRequestStatus中,如果overallActivityTime超过预设阈值,你可以使用自己的自定义错误来失败。 - Alex Reynolds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接