swift - PromiseKit 首先围绕代码,而不是函数调用
问题描述
我不想编写一个单独的函数来在我的第一次调用中返回一个 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
什么。
解决方案
根据我的理解,由于您then
在承诺链中使用,它也意味着返回一个承诺,因此您会收到此错误。如果你不打算从下一步返回promise,你可以直接使用done
after first。
如果你想从下面返回 Promise,请使用下面的链then
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)
}
如果您不想从 中返回 Promise then
,可以使用如下所示的链。
firstly {
Promise<Bool> { seal in
print("hello")
seal.fulfill(true)
}
}.done { _ in
print("done")
}.catch { (error) in
print(error)
}
我希望它有所帮助。
更新:
如果您不想返回任何东西并then
要求返回 a 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)
}
推荐阅读
- java - 如何在我的代码中正确使用静态变量?
- php - 如何从 Wordpress 的面包屑中删除“主页”
- ruby-on-rails - 无法通过我的应用将图片上传到 Google Cloud Platform
- python-2.7 - addinfourl 实例没有属性“查找”(python2.7)
- sql-server - 如何在 SQL Server 中将大十进制转换为 varchar?
- ios - iPad上的WKWebView水平滚动
- java - 有没有办法在 Cucumber 数据表中操作值?
- javascript - 不再支持 html 表
- swift - 根据路径更改响应模型/形状
- spring-mvc - Thymeleaf 动态 href 使用输入值