gpt4 book ai didi

swift - 有没有办法对函数调用进行排队?

转载 作者:搜寻专家 更新时间:2023-11-01 06:51:00 26 4
gpt4 key购买 nike

为了在结帐过程中与后端通信,我使用了异步函数:

create() :在后端创建购物车。当用户转到结帐页面时调用。

update() :在后端编辑购物车。当用户编辑购物车时调用。

confirm() :在后端确认购买。用户下订单时调用。

update() 依赖于 create() 的响应,confirm() 依赖于 create() 的响应/更新()

用户可以在另一个未完成时调用一个函数,例如在转至结帐页面后不久编辑购物车。由于依赖关系,这会导致问题。

我目前已经通过使用 bool processingshouldUpdateshouldConfirm 半解决了它。

有没有一种方法可以通过使用队列来实现,让下一个函数调用等到上一个函数调用完成?

var processing = false // Set true when a function is executing
var shouldUpdate = false // Set true when user edits cart
var shouldConfirm = false // Set true when user taps "Purchase"
var checkoutID = ""

func create() {
processing = true
APIClient.sharedClient.createShoppingCart() {
(checkoutID, error) in
...
processing = false // Finished with network call
if shouldUpdate { // if edit was done while create() is running
update()
shouldUpdate = false
}
if shouldConfirm { // if user tapped "Purchase" while create() is running
confirm()
}
}
}

func update() { // Called from view controller or create()
if processing {return}
processing = true
APIClient.sharedClient.updateShoppingCart(forCheckoutID: checkoutID) {
(error) in
...
processing = false // Finished with network call
if shouldConfirm { // if user tapped "Purchase" while update() is running
confirm()
}

}
}

func confirm() { // Called from view controller or create()/update()
if processing {return}
APIClient.sharedClient.confirmPurchase(forCheckoutID: checkoutID) {
(error) in
...
/// Finish order process
}
}

最佳答案

我个人使用 PromiseKit - 不错的文章 generally here , 包装 async here - 和 how to promises here

// your stack
var promises = [];

// add to your stack
promises.push(promise); // some promise func, see above links
promises.push(promise2);

// work the stack
when(fulfilled: promiseArray).then { results in
// Do something
}.catch { error in
// Handle error
}

类似解决方案的关键字:Promises、Deferred、Async Stacks。


或:您可以执行以下操作:

有一个池,元组数组:methodhandler 和 bool (=executed true)

创建一个 func(1) 在另一个包装函数 (2) 中运行数组中的所有函数,该函数将在执行时设置 tupels bool。

func(1) 会等到 tupel 改变,然后抓取下一个。

关于swift - 有没有办法对函数调用进行排队?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57074504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com