首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PromiseKit firstlyOn样式方法

PromiseKit firstlyOn样式方法
EN

Stack Overflow用户
提问于 2017-09-29 22:25:06
回答 2查看 784关注 0票数 1

PromiseKit提供了一个方便的方法thenOn,用于在非主线程上运行链的各个部分。然而,似乎没有任何方便的方法来设置第一个promise执行线程。

这意味着我最终要么在第一个promise中放置一个DispatchQueue.global(x).async,要么使用一个虚拟的第一个promise。

将DispatchQueue比特放在我的第一个promise中感觉被打破了,我将线程决策从主执行链转移到单个promise,但只为了这一个promise。如果我后来在我的链中添加了一个承诺,我必须移动所有的线程逻辑……不太好。

我最近做的事情是这样的:

代码语言:javascript
复制
    let queue = DispatchQueue.global(qos: .userInitiated)

    Promise(value: ()).then(on: queue) {

        // Now run first promise function

    }

这绝对是一个更干净的解决方案,但我想知道是否有人知道更好的解决方案……我敢肯定这不是一个罕见的情况?

EN

回答 2

Stack Overflow用户

发布于 2017-11-28 05:07:51

我们提供:

代码语言:javascript
复制
DispatchQueue.global().promise {
    //…
}

firstly不接受队列,因为在默认情况下它会立即执行它的内容,因此允许它有一个已配置的队列会使它的行为变得令人困惑。

更新:在最新版本中它看起来像

代码语言:javascript
复制
DispatchQueue.global().async(.promise) {  
    //...          
}
票数 2
EN

Stack Overflow用户

发布于 2017-10-01 15:41:09

您可以对任何队列执行操作,只需从队列调用fulfillreject即可

请看示例:

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    firstly {
        doFirstly()
        }
        .then {
            self.doMain()
        }
        .then {
            self.doLastest()
        }
        .catch { error in
            // handle error
        }
        .always {
            // finish
    }
}

func doFirstly() -> Promise<Void> {
    return Promise { fulfill, reject in
        let queue = DispatchQueue.global(qos: .userInitiated)
        queue.async {
            // do your operation here
            fulfill()
        }
    }
}

func doMain() -> Promise<Void> {
    return Promise { fulfill, reject in
        let queue = DispatchQueue.main
        queue.async {
            // do your operation here
            fulfill()
        }
    }
}

func doLastest() -> Promise<Void> {
    return Promise { fulfill, reject in
        let queue = DispatchQueue.global(qos: .userInitiated)
        queue.async {
            // do your operation here
            fulfill()
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46490921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档