2015-07-20 2 views
0

Я обернутый 2 из моих запросов API с Promise < T типов > возврата:PromiseKit 2,0: цепочки обещаний не проходит аргумент

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("[email protected]", 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("[email protected]", password: "password") 
    }.then { accessToken -> Void in 
     println(accessToken) 
     completion(success: true) 
    }.catch { error -> Void in 
     println(error.localizedDescription) 
} 

Однако, когда я их связываю, аргумент токена s econd 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

Проблема была подпись первого then закрытия.

Это было success -> Void, но нужно быть success -> Promise<String>

Я думал, что я был пойман умозаключения типа Свифта, но я забыл, что then перегружен принять затворов как (T) -> Promise<U> и (T) -> U.

Надеюсь, когда Swift исправляет необходимость явной подписи в закрытии then, это будет автоматически выводиться.

Смежные вопросы