Почему angularjs выбрасывает 'Illegal invocation' при использовании конструкции обещания? - PullRequest
1 голос
/ 04 апреля 2019

Я вызываю некоторую функцию обещания:

return $http.post("anyCtrl").then(location.reload);

После этого я выбрасываю исключение в консоли браузера «Незаконный вызов» в угловом формате.

Если я вызываю:

return $http.post("anyCtrl").then(function(){location.reload()});

Все хорошо.

Я ожидал, что все мои фрагменты кода должны работать.

1 Ответ

0 голосов
/ 04 апреля 2019

Передача location.reload в качестве аргумента работает более или менее так же, как и его переназначение.Если вы переназначаете метод объекта, и он не привязан, то this этого объекта станет объектом, которому он назначен.Например:

const notlocation = {};
notlocation.reload = location.reload();
notlocation.reload(); // illegal invocation

Вам необходимо вызвать reload из объекта location.Есть несколько способов сделать это.Один из них заключается в том, чтобы иметь круглые скобки с явным вызовом метода, как вы это сделали:

$http.post("anyCtrl").then(() => location.reload());

Другой - использовать .bind и привязать его к объекту, для которого вы хотите вызвать метод:

$http.post("anyCtrl").then(location.reload.bind(location));
...