在 PromiseKit 3.0 和 Swift 2 中链接承诺
Chaining promises in PromiseKit 3.0 And Swift 2
我应该如何在 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 行收到错误 "Cannot convert value of type 'URLDataPromise' to closure result type 'AnyPromise'"。
这基本上是从 PromiseKit 网站上检索到的示例,它应该可以工作,不是吗?我做错了什么?
首先,我没有看到可以 return 来自 NSURLSession.GET
的字典的界面,所以我正在使用 NSData
。此外,您必须 return 承诺每个 then
闭包才能将它们链接在一起:
firstly {
NSURLSession.GET(url)
}.then { (data) -> AnyPromise in
return AnyPromise(bound: NSURLSession.GET(url2))
}.then { (secondData) in
print("End of second request")
}
我明白了。问题只是 NSURLSession.GET 没有 return 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");
}
我应该如何在 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 行收到错误 "Cannot convert value of type 'URLDataPromise' to closure result type 'AnyPromise'"。
这基本上是从 PromiseKit 网站上检索到的示例,它应该可以工作,不是吗?我做错了什么?
首先,我没有看到可以 return 来自 NSURLSession.GET
的字典的界面,所以我正在使用 NSData
。此外,您必须 return 承诺每个 then
闭包才能将它们链接在一起:
firstly {
NSURLSession.GET(url)
}.then { (data) -> AnyPromise in
return AnyPromise(bound: NSURLSession.GET(url2))
}.then { (secondData) in
print("End of second request")
}
我明白了。问题只是 NSURLSession.GET 没有 return 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");
}