遵循与问题 39 类似的示例:http: //reactivex.io/learnrx/
我正在尝试将方法调用search(query: String)
转换为这些调用的序列。他们实现这一点的方法是创建一个,每次调用该方法时Variable
我都会使用该值进行更新。query
search(query: String)
然后我在我的init()
:
_ = queryVariable.asObservable().flatMap({ query -> Observable<[JSON]> in
return self.facebookSearch(query).takeUntil(self.queryVariable.asObservable())
}).subscribeNext({ result in
if let name = result[0]["name"].string {
print(name)
} else {
print("problem")
}
})
如果我输入"ABC"
, 我的search(query: String)
方法将被调用 3 次"A"
, "AB"
, "ABC"
。那将被映射到seq(["A", "AB", "ABC"])
with queryVariable.asObservable()
。然后我将其映射到 Facebook 搜索(在 Facebook 上按姓名搜索人)。和subscribeNext
我一起打印名字。如果我不使用takeUntil
,它会按我的预期工作,我会得到 3 组结果,每个查询("A"
, "AB"
, "ABC"
)一组。
但是,如果我快速输入(在 Facebook 有时间响应请求之前),我只想要一个结果,用于 query "ABC"
。这就是我添加takeUntil
. 有了它,我希望facebookSearch(query: String)
下一个调用会被忽略query
,但是当前查询正在取消它,所以takeUntil
我最终什么也没打印。
这是一个已知问题还是我做错了什么?