Swift PromiseKit首先围绕代码,而不是函数调用
我不想编写一个单独的函数来在第一次调用中返回承诺。我只想写下:Swift PromiseKit首先围绕代码,而不是函数调用,swift,promisekit,Swift,Promisekit,我不想编写一个单独的函数来在第一次调用中返回承诺。我只想写下: firstly { return Promise<Bool> { inSeal in var isOrderHistory = false let importTester = CSVImporter<String>(url: url) importTester?.startImportingRecords(structure:
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
{
...
首先
{
回报承诺
{inSeal in
var isOrderHistory=false
let importTester=CSVImporter(url:url)
导入器?.startImportingRecords(结构:
{(内场名)在
如果inFieldNames[2]=“付款工具类型”
{
isOrderHistory=true
}
},recordMapper:{(在Records中)->中的字符串
return”“//不在乎
}).onFinish
{(inItems)in
插入解析(isOrderHistory)
}
}
}
.那么
{inIsOrderHistory in in
如果是InSorderHistory->Void
{
}
其他的
{
...
但是我弄错了。ImportMainWindowController.swift:51:5:对成员“first(execute:)”的引用不明确。
在上面的代码中,CSVImporter在后台队列上运行,并异步调用方法(尽管按顺序)
我不知道
承诺的完整类型规范应该是什么,或者首先是什么,或者是什么。根据我的理解,由于您在承诺链中使用然后是
,因此它也意味着返回承诺,因此您会收到此错误。如果您不打算从下一个step,您可以先使用后直接使用done
如果您想从返回承诺,请使用下面的链
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)
}
我希望这有帮助
更新:
如果您不想返回任何内容,并且要求您返回承诺
,您可以返回承诺
,如下所示
firstly {
Promise<Bool> { seal in
print("hello")
seal.fulfill(true)
}
}.done { _ in
print("done")
}.catch { (error) in
print(error)
}
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)
}
首先{
承诺{盖章
打印(“你好”)
盖章。完成(真实)
}
}.然后{(回应)->承诺
打印(答复)
回报承诺()
}.完成{uuuin
打印(“完成”)
}.catch{(错误)在
打印(错误)
}
是的,这似乎是个问题。但现在我发现我真的想要一个。然后
什么也不返回,因为我想要在.done
部分中做其他事情的语义清晰。。然后
在对象上设置一个属性。显然,它可以返回结果,但似乎我应该能够拥有。然后,
不会返回任何东西。也许我只是在挑剔?你可以用一个承诺。我已经更新了答案。我希望这有帮助