【问题标题】:PromiseKit `Result.. is unused warning` in a chained sequence with a for loopPromiseKit `Result .. is used warning` 在带有 for 循环的链式序列中
【发布时间】: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

标签: ios swift promisekit


【解决方案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】:

    您可以在方法的声明中添加@discardableResultFrom the docs

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

    【讨论】:

    • 它不起作用,警告在这里显示promise.then { 但感谢您指出,我将编辑问题
    猜你喜欢
    • 2023-03-29
    • 2014-10-09
    • 2018-12-27
    • 2020-11-04
    • 1970-01-01
    • 2023-03-11
    • 2019-08-17
    • 2013-10-08
    • 1970-01-01
    相关资源
    最近更新 更多