Итак, у меня есть объект UserSearch
, где у меня есть search
метод:
(function() {
var UserSearch = window.UserSearch = function () {};
UserSearch.prototype.search = function (query) {
if (query.length) {
/* performs search and returns results */
}
}
})();
Используется другим объектом UserList
:
(function() {
var UserList = window.UserList = function (userSearch) {
this._userSearch = userSearch;
}
UserList.prototype.performSearch = function (query) {
var results = this._userSearch.search(query);
/* handles results */
}
})();
Они используются так:
var userSearch = new UserSearch();
var userList1 = new UserList(userSearch);
var userList2 = new UserList(userSearch);
Теперь мне нужно, чтобы UserSearch.search()
мог обрабатывать вызовы из нескольких экземпляров UserList
и возвращать результаты к правильному UserList
. На практике все работает нормально, но когда я выполняю поиск, я делаю запрос fetch
и использую функцию генератора, которая отменяет старые запросы, если новые выполняются до разрешения ответа, и все такое. То есть, если пользователь выполняет один поиск и находит, что он сделал опечатку, он может быстро исправить ее и выполнить поиск снова, старый будет отменен. Но теперь проблема в том, что если два поиска выполняются из двух разных списков, предыдущий отменяется. Поиск выполняется из разных экземпляров UserList
, но они используют один и тот же экземпляр UserSearch
afaik? Могу ли я каким-либо образом изменить функциональность UserSearch.search
? Я попытался переместить search
из прототипа в конструкторскую функцию, но это не помогает. Я надеюсь, что это достаточно ясно, спасибо большое!