我不想编写单独的函数来在我的第一个调用中返回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
的完整类型规范应该是什么,或者是什么。
答案 0 :(得分:2)
根据我的理解,由于您在诺言链中使用then
,所以它也意味着要返回诺言,因此会出现此错误。如果您不打算从下一步退还承诺,则可以先使用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)
}