Угловая функция обратного вызова cli и javascript - PullRequest
0 голосов
/ 13 марта 2019

Я объясню свою ситуацию.

У меня есть внешний файл javascript, который имеет такую ​​функцию:

searchForSomething(id, callbackFunction);

Этот метод 'searchForSomething' является асинхронным, а возвращаемым является вызовcallbackFunction.В моем component.ts у меня есть:

declare function searchForSomething(id, callbackFunction): any;
...
message: string;
id: number;
...
next(){
  searchForSomething(this.id, this.print);
}

print(result: string) {
  this.message = result;
  console.log(result);
}
...

ОШИБКА: Uncaught ReferenceError: «сообщение» не определено

Но ни «это» не определено.Мой код работает с использованием этого теста:

next(){
  //searchForSomething(this.id, this.print);
  this.print('result as a mock.');
}

Я предполагаю, что у меня здесь проблема контекста или области видимости.Я понял, что когда мой метод ts вызывается внешним javascript, я теряю угловые ссылки.

Какой самый точный способ использовать функцию обратного вызова в ts?Или мне нужно пересмотреть мой метод JavaScript, чтобы удалить параметр 'функция'?Но это асинхронно, поэтому я не могу просто удалить callbackFunction, поставить return и ждать результата.

1 Ответ

3 голосов
/ 13 марта 2019

Это вопрос о сфере применения.Когда вы передаете функцию обратного вызова, функция теряет свою область видимости.

Таким образом, вы можете преобразовать print в функцию стрелки, чтобы сделать область действия функции там, где она определена:

print = (result: string) => {
  this.message = result;
  console.log(result);
}

ОБНОВЛЕНИЕ

Также вы можете использовать .bind(this) для назначения области вручную, если вы не хотите использовать функции стрелок.

next(){
  searchForSomething(this.id, this.print.bind(this));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...