#angularjs #promise
#angularjs #обещание
Вопрос:
У меня есть интересная проблема для всех angular ninjas. Может ли кто-нибудь из вас объяснить, почему служба $ rootScope, введенная одним инжектором, не может разрешить обещания с помощью $ apply / $ digest, созданного с помощью сервисов $ q из другого инжектора.
Это можно воспроизвести с помощью следующего теста, написанного на typescript:
describe("TestInjection", () => {
let rootScope1 : angular.IRootScopeService;
let q1 : angular.IQService;
let rootScope2 : angular.IRootScopeService;
let q2 : angular.IQService;
beforeEach(() => {
let $injector1 : angular.auto.IInjectorService = angular.injector(["ng"]);
let $injector2 : angular.auto.IInjectorService = angular.injector(["ng"]);
// noinspection TsLint
q1 = $injector1.get("$q");
q2 = $injector2.get("$q");
rootScope1 = $injector1.get("$rootScope");
rootScope2 = $injector2.get("$rootScope");
});
describe("with regard injection and promise testing", () => {
it("promise should be resolved if both services come from the same injector", () => {
let deferred = q1.defer();
let value = false;
deferred.promise.then((v : boolean) => {
value = v;
});
deferred.resolve(true);
rootScope1.$digest();
expect(value).toBeTruthy();
});
it("promise should be resolved if both services come from different injectors", () => {
let deferred = q1.defer();
let value = false;
deferred.promise.then((v : boolean) => {
value = v;
});
deferred.resolve(true);
rootScope2.$digest();
expect(value).toBeTruthy();
});
});
});
Я хотел бы понять, почему вещи ведут себя таким образом.