PromiseKit 2.0:链接承诺并没有通过论证

时间:2015-07-20 20:46:24

标签: ios swift promisekit

我已使用Promise< T>包装了2个我的API请求返回类型:

func registerWithEmail(email: String, firstName: String, lastName: String, password: String, subscribe: Bool) -> Promise<Bool>

func requestAccessTokenWithEmail(username: String, password: String) -> Promise<String>

单独使用它们可以正常工作:

firstly {
    client.registerWithEmail("foo@gmail.com", firstName: "john", lastName: "smith", password: "password", subscribe: false)
    }.then { success -> Void in
        completion(success: success)
    }.catch { error -> Void in
        println(error.localizedDescription)
}

firstly {
    client.requestAccessTokenWithEmail("foo@gmail.com", password: "password")
    }.then { accessToken -> Void in
        println(accessToken)
        completion(success: true)
    }.catch { error -> Void in
        println(error.localizedDescription)
}

但是,当我链接它们时,永远不会填充第二个then调用的令牌参数:

firstly {
    client.registerWithEmail(username, firstName: "a", lastName: "b", password: password, subscribe: false).then { success -> Void in
        return client.requestAccessTokenWithEmail(username, password: password)
    }.then { accessToken -> Void in
        println(accessToken)
        completion(success: true)
    }
}

如果我在这个闭包中打破,我无法查看accessToken参数,只能查看外部completion闭包。但是,如果我在requestAccessTokenWithEmail函数内部中断,则在调用accessToken时会填充fulfill参数。

我对PromiseKit很新,所以如果我做了些蠢事,请告诉我。

我使用的是PromiseKit 2.0,Swift 1.2,Xcode 6.4

1 个答案:

答案 0 :(得分:1)

问题是第一个then关闭的签名。

它是success -> Void,但必须是success -> Promise<String>

我认为这会被Swift的类型推断所吸引,但我忘记then已超载以接受(T) -> Promise<U>(T) -> U的闭包。< / p>

希望当Swift修复then闭包中显式签名的需要时,它将自动推断出来。