只是从PromiseKit开始,然后遇到了一个奇怪的问题 编译问题:
不知道我在这里做错了什么。
承诺
func test(someValue: Int) -> Promise<Void> {
return Promise { seal in
// do something with someValue
seal.fulfill(())
}
}
这有效:
firstly {
test(someValue: 2)
}.then {
test(someValue: 1)
}.catch { error in
...
}
但是这个没有:
firstly {
test(someValue: 2)
}.then {
let dd = 1
return test(someValue: dd)
}.catch { error in
...
}
答案 0 :(得分:1)
我最近已经使用Promises了很多次,并且遇到了类似的错误,似乎有时所有的闭包和泛型都获得了编译器的最佳支持。
我发现,如果您有done
呼叫,则应该始终进行catch
呼叫,将其添加到catch
之前。 done
意味着您将不再束缚自己的诺言,然后可以使用PKFinalizer
,就像catch
调用一样。
如果您的诺言中有您未使用的参数,请确保在下一个_ in
/ then
通话中添加done
,或者您可以添加asVoid()
在两者之间进行调用,从而丢弃结果。
编辑:
这周,我也遇到了一个错误,即在关闭中添加额外的一行使其失败。由于我所做的是将一个承诺转换为多个承诺,因此我使用了flatMapThen
。 Promise
上有几种方法可用于不同的结果。如果要存储来自诺言的结果并继续,则可以使用get
,如果要将结果转换为其他类型,可以使用map。
例如,我会将您失败的错误翻译成这样
firstly {
test(someValue: 2)
}.map {
1
}.then {
test(someValue: $0)
}.done {
print("success")
}.catch { error in
...
}