如何在 PromiseKit 中设置 when(fulfilled:)?

Posted

技术标签:

【中文标题】如何在 PromiseKit 中设置 when(fulfilled:)?【英文标题】:How to set up when(fulfilled:) in PromiseKit? 【发布时间】:2017-03-18 22:33:04 【问题描述】:

我设置了一个函数来返回Promise<PFObject>。我想在 PromiseKit 的 when(fulfilled:) 功能中使用此功能,但每当我尝试这样做时,都会出现错误。这是返回Promise<PFObject>的函数:

func Query() -> Promise<PFObject>
        return Promise fulfill, reject in
            let linkQueryy = PFUser.query()
            linkQueryy?.findObjectsInBackground(block:  (objectss, error) in
                if let objects = objectss
                    for object in objects
                        fulfill(object)
                    
                
            )
        
    

如您所见,该函数在完成时返回 Promise。因此,我尝试在viewDidLoad() 中设置when 语句,如下所示:

override func viewDidLoad() 
        super.viewDidLoad()

        when(fulfilled: Query()).then
            //do more asynch stuff
        
    

但是,我收到 xcode 无法“使用参数列表类型‘(fulfilled:Promise&lt;PFObject&gt;)’调用‘when’”的错误。我不知道如何解决这个问题,因为我认为我已经正确设置了它。 when 需要一个承诺,我给它一个承诺,所以我不知道该怎么做。

【问题讨论】:

什么是linkQueryy() 【参考方案1】:

尝试如下:

when(fulfilled: [linkQueryy()] as! [Promise<Any>]).then  _ in
    // do more asynch stuff

参数fulfilled:需要是可迭代的。

顺便说一句,when(fulfilled:) 只有在你有很多 promise 并且需要等待全部成功完成时才需要。但在您的代码中,您只需要等待一个承诺。

对于单个promise,更好的方法是形成如下链:

firstly 
    linkQueryy()
.then  _ -> Void in
    // do more asynch stuff
.catch  _ in
    // error!

【讨论】:

以上是关于如何在 PromiseKit 中设置 when(fulfilled:)?的主要内容,如果未能解决你的问题,请参考以下文章

PromiseKit 3 for Swift2 中的“when”是不是已重命名?

在 T-SQL CASE 语句的 WHEN 条件中设置变量等于数字时语法不正确[关闭]

如何在 java 中设置 umask?

如何在 ElementRef (nativeEelement) 中设置 HTML 内容?

如何在本机反应中设置 FlatList 的刷新指示器?

AngularJS:如何在模板中设置变量?