PromiseKit 首先围绕代码,而不是函数调用
Posted
技术标签:
【中文标题】PromiseKit 首先围绕代码,而不是函数调用【英文标题】:PromiseKit firstly around code, not function call 【发布时间】:2018-09-20 07:09:53 【问题描述】:我不想编写一个单独的函数来在我的第一次调用中返回一个 Promise。我只想写这个:
firstly
return Promise<Bool>
inSeal in
var isOrderHistory = false
let importTester = CSVImporter<String>(url: url)
importTester?.startImportingRecords(structure:
(inFieldNames) in
if inFieldNames[2] == "Payment Instrument Type"
isOrderHistory = true
, recordMapper: (inRecords) -> String in
return "" // Don't care
).onFinish
(inItems) in
inSeal.resolve(isOrderHistory)
.then
inIsOrderHistory in
if inIsOrderHistory -> Void
else
...
但是我搞错了。 ImportMainWindowController.swift:51:5: Ambiguous reference to member 'firstly(execute:)'
示例代码或文档似乎都没有涵盖这个(我认为是)基本用例。在上面的代码中,CSVImporter 在后台队列上运行并异步调用方法(尽管按顺序)。
我无法弄清楚 Promise
或 firstly
的完整类型规范应该是什么。
【问题讨论】:
【参考方案1】:根据我的理解,由于您在承诺链中使用then
,它也意味着返回一个承诺,因此您会收到此错误。如果你不打算从下一步返回promise,你可以在first之后直接使用done
。
如果你想从then
返回Promise,请使用下面的链
firstly
Promise<Bool> seal in
print("hello")
seal.fulfill(true)
.then (response) in
Promise<Bool> seal in
print(response)
seal.fulfill(true)
.done _ in
print("done")
.catch (error) in
print(error)
如果你不想从then
返回Promise,你可以使用如下链。
firstly
Promise<Bool> seal in
print("hello")
seal.fulfill(true)
.done _ in
print("done")
.catch (error) in
print(error)
希望对你有所帮助。
更新:
如果您不想返回任何东西并且then
要求返回Promise
,您可以返回Promise<Void>
,如下所示。
firstly
Promise<Bool> seal in
print("hello")
seal.fulfill(true)
.then (response) -> Promise<Void> in
print(response)
return Promise()
.done _ in
print("done")
.catch (error) in
print(error)
【讨论】:
是的,这似乎是问题所在。但现在我发现我真的想要一个什么都不返回的.then
,因为我想要在.done
部分做其他事情的语义清晰。 .then
在对象上设置一个属性。显然它可以返回该结果,但似乎我应该能够拥有不返回任何内容的.then
。也许我只是挑剔?
你可以使用 Promise以上是关于PromiseKit 首先围绕代码,而不是函数调用的主要内容,如果未能解决你的问题,请参考以下文章