首页 > 解决方案 > 如何用 RxJS Observables/Subjects 包装这个 jquery 插件的回调函数?

问题描述

我正在尝试将https://github.com/devbridge/jQuery-Autocomplete与 Websockets 和 RxJS 一起使用。

通常,lookupAJAX 函数如下所示:

lookup: await (query, done) => {
    // make ajax call
    const response = await fetch(// pass query str here);
    const respJson = await response.json();
    done(respJson);
}

是正在输入的query字符串,是done我们将结果传递给的回调函数。

我想将此功能包装在 RxJS 可观察对象或主题中,这样我就可以做诸如去抖动之类的事情。这是我到目前为止所拥有的:

const webSocketSubject = webSocket(`/ws/typeahead/`);
const subject = new Subject();

webSocketSubject.subscribe(console.log)

const debouncedSubject = subject.pipe(
    debounceTime(200)
);
debouncedSubject.subscribe((x) => {
    webSocketSubject.next({
        'payload': {
            'query': x,
        },
    });
    console.log(x);
});


 $('#id_my_input_field').autocomplete({
     lookup: (query, done) => {
         debouncedSubject.next(query);
     }
 });

我已经测试了这段代码,我可以看到它确实将 websocket 消息发送到服务器,我可以看到响应。

如何将 websocket Subject 的结果传递给done回调?

标签: javascriptjquerycallbackrxjsobservable

解决方案


推荐阅读