PromiseKit:无法在处理程序之间调用自定义代码
PromiseKit: can't call custom code between then handlers
刚开始使用 PromiseKit 并且 运行 进入了一个奇怪的
编译问题:
- 首先:对成员的引用不明确 'firstly(execute:)' ()
- without firstly: 无法推断复杂闭包 return 类型;添加显式
不确定我做错了什么。
承诺
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
...
}
我最近一直在使用 Promises,我 运行 遇到了类似的错误,似乎有时所有的闭包和泛型都得到了编译器的最佳支持。
我发现你应该 总是 有一个 done
电话,如果你有一个 catch
电话,把它添加到 catch
。 done
意味着您将不再链接您的承诺,然后您可以使用 PKFinalizer
,就像 catch
调用一样。
如果您的承诺有您未使用的参数,请确保在您的下一个 then
/done
调用中添加 _ in
,或者您可以添加 asVoid()
在两者之间调用,它会丢弃结果。
编辑:
本周我还遇到了一个错误,即向闭包添加额外的一行使其失败。由于我所做的是将一个承诺转换为多个承诺,因此我使用了 flatMapThen
。 Promise
上有多种方法可用于不同的结果。如果要存储 promise 的结果并继续,可以使用 get
,如果要将结果转换为另一种类型,则可以使用 map。
例如,我会把你失败的错误翻译成这个
firstly {
test(someValue: 2)
}.map {
1
}.then {
test(someValue: [=10=])
}.done {
print("success")
}.catch { error in
...
}
刚开始使用 PromiseKit 并且 运行 进入了一个奇怪的 编译问题:
- 首先:对成员的引用不明确 'firstly(execute:)' ()
- without firstly: 无法推断复杂闭包 return 类型;添加显式
不确定我做错了什么。
承诺
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
...
}
我最近一直在使用 Promises,我 运行 遇到了类似的错误,似乎有时所有的闭包和泛型都得到了编译器的最佳支持。
我发现你应该 总是 有一个 done
电话,如果你有一个 catch
电话,把它添加到 catch
。 done
意味着您将不再链接您的承诺,然后您可以使用 PKFinalizer
,就像 catch
调用一样。
如果您的承诺有您未使用的参数,请确保在您的下一个 then
/done
调用中添加 _ in
,或者您可以添加 asVoid()
在两者之间调用,它会丢弃结果。
编辑:
本周我还遇到了一个错误,即向闭包添加额外的一行使其失败。由于我所做的是将一个承诺转换为多个承诺,因此我使用了 flatMapThen
。 Promise
上有多种方法可用于不同的结果。如果要存储 promise 的结果并继续,可以使用 get
,如果要将结果转换为另一种类型,则可以使用 map。
例如,我会把你失败的错误翻译成这个
firstly {
test(someValue: 2)
}.map {
1
}.then {
test(someValue: [=10=])
}.done {
print("success")
}.catch { error in
...
}