遵循与问题 39 类似的示例:http: //reactivex.io/learnrx/
我正在尝试将方法调用search(query: String)转换为这些调用的序列。他们实现这一点的方法是创建一个,每次调用该方法时Variable我都会使用该值进行更新。querysearch(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我最终什么也没打印。
这是一个已知问题还是我做错了什么?