如何使用PromiseKit处理仅限标头的响应?

时间:2014-07-31 03:58:13

标签: ios ruby-on-rails json rest

我在IOS应用中使用PromiseKit与Rails RESTful后端进行通信, 并且有一些只返回标题的调用,比如在后端执行head 200

我所尝试的是:
我使用[NSURLConnection POST:url formURLEncodedParameters:parameters]将数据发布到后端,后端确实收到数据并使用head 200消息进行响应,但PromiseKit报告了以下异常:

  

2014-07-31 11:19:39.501 HelloPOS [13223:60b]错误   Domain = NSCocoaErrorDomain Code = 3840"操作不能   完成。 (可可误差3840。)" (没有值。)UserInfo = 0xa4c5a90   {NSDebugDescription =没有值。,PMKURLErrorFailingDataKey = {length = 1,capacity = 16,bytes = 0x20},   PMKURLErrorFailingURLResponseKey = {URL:   http://SOME_APP.SOME_HOST.com/api/v1/sales.json} {状态代码:200,   标题{       "缓存控制" =" max-age = 0,private,must-revalidate&#34 ;;       连接="保持活力&#34 ;;       " Content-Length的" = 1;       "内容类型" =" application / json&#34 ;;       Date =" Thu,31 Jul 2014 03:19:25 GMT&#34 ;;       Etag =" \" 7215ee9c7d9dc229d2921a40e899ec5f \"&#34 ;;       Server =" WEBrick / 1.3.1(Ruby / 2.0.0 / 2014-05-08)&#34 ;;       Via =" 1.1 vegur&#34 ;;       " X-的Content-Type-选项" = nosniff;       " X框,选项" = SAMEORIGIN;       " X - 请求-ID" =" 5a1c1aa1-4b42-41ea-8397-a5df8fa956bc&#34 ;;       " X-运行" =" 0.013359&#34 ;;       " X-XSS-保护" =" 1;模式=块&#34 ;; }}

这可能是因为仅标题响应没有正文,并且导致错误

PS:我已经更改了异常消息中的URL

1 个答案:

答案 0 :(得分:3)

问题是服务器声称响应的JSON内容长度为1个字节。但是响应没有解析为JSON,因此承诺的PromiseKit错误。

PromiseKit没有提供忽略响应的机制,但如果您无法修复服务器以提供正确的响应,您可以轻松地在此处做出自己的承诺。

#import <OMGHTTPURLRQ.h>

- (PMKPromise *)myPromise:(id)args {
    id rq = [OMGHTTPURLRQ POST:url:args];
    id q = ;
    return [PMKPromise new:^(PMKPromiseFulfiller fulfill, PMKPromiseRejecter reject){
        [NSURLConnection sendAsynchronousRequest:rq queue:q completionHandler:^(id rsp, id data, NSError *urlError) {
            if (urlError) {
                reject(urlError)
            } else {
                fulfill(nil);
            }
        }];
    }];
}

编辑:PromiseKit现在适用于这种特定情况,因此您不应再出现此特定错误。