如何在 PromiseKit 6 中使用循环?
Posted
技术标签:
【中文标题】如何在 PromiseKit 6 中使用循环?【英文标题】:How to use Loop in PromiseKit 6? 【发布时间】:2020-07-13 08:02:45 【问题描述】:我有一个名为chaining
的函数,它链接了多个promises
,我想多次调用该函数。为此,我使用了for
循环,我希望使用索引0
,chaining
函数应该使用索引0 执行。(我有一个属性数组ListingArray[]
,我想使用ListingArray[ 0] 在循环的一次迭代中,ListingArray[1] 在另一次迭代中等等)。
这是我的chaining
函数:
func chaining()
firstly
Promise_getIDOfOwnerFromCollection()
.then (IdsInCollection)-> Promise<[String]> in
return self.Promise_getOwnerListings(IDs: IdsInCollection)
.then (ownerListings) ->Promise<Void> in
return self.Promise_getReviews(ListingIDs: ownerListings)
.done (arg0) in
let () = arg0
print("Work Done")
.catch (error) in
print("Error is \(error.localizedDescription)")
我正在像这样循环调用该函数。
for Count in 0...4
chaining()
现在的问题是firstly
内部的函数在then
执行之前被立即调用了5 次。我希望序列与Count
0 一样,chaining
函数应该执行一次,然后Count
1,函数应该再次执行。
【问题讨论】:
【参考方案1】:您的代码中发生的行为完全符合预期。鉴于您将链接实例化 4 次,因此第一个作业将执行这样的次数。
相反,您首先需要以某种方式提供单个工作实例。
目前:执行 N 次 firstly + rest of the job
预期:首先 + 执行 N 次 其余工作
这里是基于你的代码示例。
struct Review
func Promise_getReviews(listingIDs ids: [String]) -> Promise<[Review]>
func Promise_getOwnerListings(IDs ids: [String]) -> Promise<[String]>
func chaining(from initialWork: Promise<[String]>)
firstly when(fulfilled: initialWork)
.then(Promise_getOwnerListings)
.then(Promise_getReviews)
.done print("Work Done")
.catch print("Error")
let initialWork = Promise<[String]>(["1","2", "3"])
(0...3).forEach chaining(from: initialWork)
【讨论】:
非常感谢您的回复!我是使用promiseKit
的新手,我很难理解你的答案。如果可能的话,请您添加更多详细信息来回答,以便我快速理解并快速奖励您 LOL :)
是的,没问题。基本上我发给你的例子应该完全符合你的意图。我所做的不同之处是为 first 块提供了一个 Promise。为了避免在调用链接时每次迭代都创建“新工作”。这就是为什么如您所见,我正在注入 Promise,以避免在第一次关闭时创建新工作。
关于其余部分,我只是使用 swift 的语法糖,它允许您执行 then(Promise_getOwnerListings) 并且我将比: ``` .then (IdsInCollection)- > Promise in return self.Promise_getOwnerListings(IDs: IdsInCollection) ``` 但它们的作用相同。 :)
说的很对。那么Review
结构呢?制作struct背后的逻辑是什么?
没什么特别的 :) 我确实通过阅读此方法签名 (Promise_getReviews) 假设您将收到基于提供的 ID 的评论。然后我确实创建了一个虚拟结构来表示示例。以上是关于如何在 PromiseKit 6 中使用循环?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PromiseKit 6.3 返回 Promise<JSON>
PromiseKit 6:如何创建多个并发 Promise 并将它们各自的结果分组到一个数组中?