我应该如何在PromiseKit 3.0和Swift 2中链接承诺?我正在尝试以下代码:
let url = "https://httpbin/org/get";
let url2 = "https://httpbin/org/get";
firstly {
NSURLSession.GET(url)
}.then { (json: NSDictionary) in
NSURLSession.GET(url2) // Error in this line
}.then { (json: NSDictionary) in
print("End of second request");
}
但我在第6行收到错误“无法将类型'URLDataPromise'的值转换为闭包结果类型'AnyPromise'。”
这基本上是从PromiseKit网站检索的样本,它应该可以工作,不是吗?我做错了什么?
答案 0 :(得分:8)
我明白了。问题只是NSURLSession.GET没有返回NSDictionary,因此以下代码足以解决问题:
let url = "https://httpbin/org/get";
let url = "https://httpbin/org/get";
let url2 = "https://httpbin/org/get";
firstly {
NSURLSession.GET(url)
}.then { data in
NSURLSession.GET(url2)
}.then { data in
print("End of second request");
}
一个重要的事情是,如果你的闭包有多行代码,Swift就不能推断出类型,如果是这种情况你必须在闭包声明中指定类型。 这里有一些例子:
let url = "https://httpbin/org/get";
let url2 = "https://httpbin/org/get";
firstly {
NSURLSession.GET(url)
}.then { data -> URLDataPromise in
print("Two lines clojure with return");
return NSURLSession.GET(url2)
}.then { data -> Void in
print("Two lines clojure without return");
print("Second line sample");
}
答案 1 :(得分:1)
首先,我没有看到可以从NSURLSession.GET
返回字典的界面,所以我正在使用NSData
。此外,您必须返回每个then
闭包的承诺,以便将它们链接在一起:
firstly {
NSURLSession.GET(url)
}.then { (data) -> AnyPromise in
return AnyPromise(bound: NSURLSession.GET(url2))
}.then { (secondData) in
print("End of second request")
}