gpt4 book ai didi

swift - PromiseKit:无法在处理程序之间调用自定义代码

转载 作者:行者123 更新时间:2023-11-28 13:46:47 40 4
gpt4 key购买 nike

刚开始使用 PromiseKit 遇到了一个奇怪的问题编译问题:

  • with firSTLy:对成员“firSTLy(execute:)”的引用不明确 ()
  • without firSTLy:无法推断复杂的闭包返回类型;添加明确的

不确定我在这里做错了什么。

promise

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,但我遇到了类似的错误,似乎有时所有的闭包和泛型都能得到编译器的最佳效果。

我发现如果你有一个 catch 调用,你应该总是有一个 done 调用,把它添加到捕捉done 意味着您将不再链接您的 promise,然后您可以使用 PKFinalizer,就像 catch 调用一样。

如果您的 promise 有您没有使用的参数,请确保在您的下一个 then/done 调用中添加 _ in,或者您可以在两者之间添加一个 asVoid() 调用,它会丢弃结果。

编辑:

这周我还遇到了一个错误,即向闭包添加额外的一行使其失败。由于我所做的是将一个 promise 转换为多个 promise ,因此我使用了 flatMapThenPromise 上有多种方法,您可以使用它们来获得不同的结果。如果您想存储 promise 的结果并继续,您可以使用 get,如果您想将结果转换为另一种类型,则可以使用 map。

例如,我会把你失败的错误翻译成这个

firstly {
test(someValue: 2)
}.map {
1
}.then {
test(someValue: $0)
}.done {
print("success")
}.catch { error in
...
}

关于swift - PromiseKit:无法在处理程序之间调用自定义代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308895/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com