Метод, вызванный из нескольких экземпляров, не запускается отдельно - PullRequest
0 голосов
/ 09 сентября 2018

Итак, у меня есть объект 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 из прототипа в конструкторскую функцию, но это не помогает. Я надеюсь, что это достаточно ясно, спасибо большое!

...