MagicSuggest 数据函数中的 Promise

Promise in MagicSuggest data function

我试过直接在 github 上问这个问题,但这个项目似乎没有太多动静了。如果 SO 上有人有想法,那就太好了。是否可以 return 数据函数中的承诺?我尝试了以下方法,但似乎不起作用。问题是我试图在数据函数中进行 ajax 调用,它需要一个 result/data 数组。当然,在进行异步 ajax 调用时我不能这样做。

var ms = $('#mycombo').magicSuggest({minChars: 2, data : function(q) {
    return someAPI.findSuggestions(q, currentLang).then(function(response) {

        if(!_.isEmpty(response.data.suggestions)) {
            _.each(response.data.suggestions, function(suggestion) {
                if (suggestion.id && suggestion.label) {
                    data.push({ id: suggestion.id, name: suggestion.label });
                }
            });
        }
    });

    return data;
}});

如果有其他方法可以解决此问题,我将不胜感激。

提前致谢。

迈克尔

对于那些感兴趣的人,我已经设法找到了解决问题的方法。正如在 github (https://github.com/nicolasbize/magicsuggest/issues/281) 上发布的那样,您需要在初始化期间使用 keyup 事件而不是设置数据 属性。所以它现在看起来像这样:

var ms = $('#mycombo').magicSuggest({minChars: 2});

$(ms).on('keyup', function(e, m, v) {
    // ... get data via ajax and call "ms.setData(data)" in the response callback ...
    // ... you can use m.getRawValue() to get the current word being typed ...
    ms.setData(data);    
}

这将导致在每次按键后触发 ajax 调用,因此您可能希望通过添加某种延迟或其他方式来改善这一点。

我也这样做过:

const suggester: any = divElem.magicSuggest({
    ...more properties here...
    data: (query) => {
        if (query) {                    
            this.myService.mySearch(query).take(1).subscribe((list) => {
                suggester.setData(list);
            });
         }
         return [];
    },
    ...more properties here...
});

哪里我的搜索(查询)returns:

Observable<MyObject[]>