PromiseKit `Result .. is used warning` 在带有 for 循环的链式序列中

Posted

技术标签:

【中文标题】PromiseKit `Result .. is used warning` 在带有 for 循环的链式序列中【英文标题】:PromiseKit `Result.. is unused warning` in a chained sequence with a for loop 【发布时间】:2019-04-29 10:17:27 【问题描述】:

我收到了这个烦人的警告,但我无法摆脱它。 假设我有一个向蓝牙文件设备发送命令的承诺,要执行一个过程,我需要同步发送这些命令。 所以你可以在 PromiseKit 6 中做的是创建一个 for 循环并使用 then 将每个命令附加到前一个 Promise 中。这种方法的问题是编译器会触发关于Result of call to 'then(on:flags:_:)' is unused 的警告,就像缺少catch。我知道我可以使用 cauterize() ,但在这种情况下,我想我会丢失执行每个承诺时抛出的错误。 when 不可行,因为它会在我需要同步时同时执行。 这是一个与字符串一起使用的小示例,在我的实际应用程序中它们不是字符串。

 static func promise_startProcedure(with commands: [String]) -> Promise<Void> 
        let promise = Promise()
        for command in commands 
            promise.then  //<-- WARNING SHOW HERE
                Promise.value(command)
            
        
        return promise
    

有没有办法摆脱这个警告? [更新] 我做错了,答案不正确,但我指出了正确的方向。

static func promise_startProcedure(with commands: [String]) -> Promise<Void> 
            var promise = Promise()
            for command in commands 
                promise = promise.then  
                    Promise.value(command)
                
            
            return promise
        

【问题讨论】:

我看不出这些承诺有什么用处。 @Kamran 当然,正如我所说,这只是一个小例子,这个过程与其他承诺链接在一起,最后有一个 catch 【参考方案1】:

试试这个。我刚刚添加了Underscore 来抑制警告,但没有收到该警告。

static func promise_startProcedure(with commands: [String]) -> Promise<Void> 
    let promise = Promise()
    for command in commands 
        _ = promise.then 
            Promise.value(command)
        
    
    return promise

【讨论】:

【参考方案2】:

您可以在方法的声明中添加@discardableResult。 From the docs:

例如,函数声明中的 discardableResult 属性 表示,虽然函数返回一个值,但编译器 如果返回值未使用,则不应生成警告。

【讨论】:

它不起作用,警告在这里显示promise.then 但感谢您指出,我将编辑问题

以上是关于PromiseKit `Result .. is used warning` 在带有 for 循环的链式序列中的主要内容,如果未能解决你的问题,请参考以下文章

从 PromiseKit 中的完成处理程序返回 Promise

ES-Result window is too large

Elasticsearch 的分页报错 result window is too large

PromiseKit O-C 指南

PromiseKit pod 安装正确,但 import PromiseKit 返回错误?

ES报错Result window is too large问题处理