【问题标题】:How to use PromiseKit to handle header-only response?如何使用 PromiseKit 处理仅标头响应?
【发布时间】:2014-09-22 21:49:30
【问题描述】:

我在 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={长度 = 1,容量 = 16,字节 = 0x20}, PMKURLErrorFailingURLResponseKey= { URL: http://SOME_APP.SOME_HOST.com/api/v1/sales.json } { 状态码:200, 标题{ "Cache-Control" = "max-age=0, private, must-revalidate"; 连接=“保持活动”; “内容长度”= 1; “内容类型”=“应用程序/json”; 日期 =“2014 年 7 月 31 日星期四 03:19:25 GMT”; Etag = "\"7215ee9c7d9dc229d2921a40e899ec5f\""; 服务器 = "WEBrick/1.3.1 (Ruby/2.0.0/2014-05-08)"; Via = "1.1 维格"; “X-Content-Type-Options”= nosniff; “X-Frame-Options”=SAMEORIGIN; "X-Request-Id" = "5a1c1aa1-4b42-41ea-8397-a5df8fa956bc"; “X-运行时间”=“0.013359”; “X-Xss-保护”=“1;模式=块”; } }}

可能是header-only response没有body,导致报错

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

【问题讨论】:

    标签: ios ruby-on-rails json rest


    【解决方案1】:

    问题是服务器声称响应具有长度为 1 字节的 JSON 内容。但是响应不会解析成 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 现在可以解决此特定情况,因此您不应再收到此特定错误。

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 2014-03-10
      • 2019-06-01
      • 2020-03-04
      • 1970-01-01
      • 2012-04-21
      相关资源
      最近更新 更多