无法将 Promise (_,_) -> DataRequest 类型的返回表达式转换为返回类型 Promise<DataResponse,AnyObject>>

Posted

技术标签:

【中文标题】无法将 Promise (_,_) -> DataRequest 类型的返回表达式转换为返回类型 Promise<DataResponse,AnyObject>>【英文标题】:Cannot convert return expression of type Promise (_,_) -> DataRequest to return type Promise<DataResponse,AnyObject>> 【发布时间】:2017-06-19 21:24:24 【问题描述】:

无法将 Promise (,) 类型的返回表达式 -> DataRequest 转换为返回类型 Promise>

我的功能是

func postJson(_ url: String, parameters: [String: String]) -> Promise<DataResponse<AnyObject>> 

        var request = URLRequest(url: URL(string: url)!)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")

        request.httpBody = try! JSONSerialization.data(withJSONObject: parameters)

        return Promise  fulfill, reject in

        manager.request(request)
            .responseJSON  response in
                fulfill(response)
        

我在 return Promise 行收到此错误。如何转换?

我尝试将我的返回签名更改为 Promise&lt;DataRequest, Error 并在该行上得到一个编译错误,即 Promise 过于专业化了 2 个参数而不是 1 个。

【问题讨论】:

【参考方案1】:

问题在于fulfill,因为它需要参数DataResponse&lt;AnyObject&gt;,但您传递的是DataResponse&lt;Any&gt;

postJson 方法的返回类型更改为Promise&lt;DataResponse&lt;Any&gt;&gt; 应该可以解决您的问题。

改变这一行

func postJson(_ url: String, parameters: [String: String]) -> Promise<DataResponse<AnyObject>> 

func postJson(_ url: String, parameters: [String: String]) -> Promise<DataResponse<Any>> 

【讨论】:

以上是关于无法将 Promise (_,_) -> DataRequest 类型的返回表达式转换为返回类型 Promise<DataResponse,AnyObject>>的主要内容,如果未能解决你的问题,请参考以下文章

自己的Promise

getItem 为啥返回 'Promise "_U": 0, "_V": 0, "_W": null, "_X": n

如何从 async.parallel 访问结果?

为啥 getItem 在我的代码中使用 asyncStorage 返回 'Promise "_U": 0, "_V": 0, "_W":

使用Promise.all删除所有ID

从 Promise 处理程序调用 Ember _super 方法