取消 Firebase 函数。

3

在Firebase的HTTPS Callable函数请求期间,是否有可能取消函数调用? 我有一个带有预测搜索的函数。每当用户在搜索字段中输入字符时,它都会被调用。

代码:

func startSearch(_ query: String, completion: @escaping (_ results: [SearcheResults]) -> Void) {

    let data = [
        "query": query
    ]

    functions.httpsCallable("startSearch").call(data) { (result, error) in

        if error != nil {
          completion([])
      } else if let data = result?.data {
            // some data manipulations
            completion(elements)
        }
    }
}

也许可以取消之前的完成?因为现在,如果用户输入文本非常迅速,例如“柏林”,那么自动完成将会触发6次。我希望有一种方法来取消函数或取消先前的完成。

提前感谢您的帮助。

2个回答

6

你应该尝试使用防抖技术,在 debounce 中,当你发起请求之前,你需要等待一个短暂的时间(例如:2秒),如果用户在这段时间内再次输入,计时器将重新设置为2秒,查看 link

一旦调用被执行,它就无法被取消,它要么会被完整地执行,要么会超时。


谢谢,我会看一下的。 - Pete Streem

3

一旦您调用了可调用函数,它就无法被取消。该函数将运行到完成或超时。您需要确保 在客户端上 真正想要调用该函数。您不必消费结果(如果您希望忽略它),但交易将完成,除非客户端应用程序在此过程中崩溃。在这种情况下,后端的函数仍将完成,但无法提供响应。


1
我能够取消URLSession请求,为什么无法取消Firebase函数请求? - Michael Ozeryansky
1
你并没有真正取消,只是停止等待。 - Arutyun Enfendzhyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接