我试图解决从我的服务到我的控制器的承诺。
Service.ts
public SetupPromise: angular.IPromise<any> = this.$q.defer().promise;
Controller.ts
//include my Service in my Controller
private Service: Service
this.Service.SetupPromise.then(() => {
console.log("Promise resolved");
});
要解决我的诺言,我使用这样做:
Service.ts
this.SetupPromise = this.$q.resolve();
当这样做,它应该解决我的控制器内的承诺。它工作正常,它确实解决它,但只有当我改变状态并回到控制器。整个SetupPromise.then()
位于我的控制器的构造函数内。
无论其一些奇怪的原因(也许是时机?),我可以解决的承诺,如果我这样做我的控制器内:
Controller.ts
setTimeout(() => {
this.Service.SetupPromise.then(() => {
console.log("Promise resolved);
});
}, 1000);
基本上等待第二次在做承诺“设置”之前。更奇怪的是,当我用我的控制器加载页面时,它首先加载承诺设置,然后加载服务。所以这不是因为一个在另一个之前加载。
我解决了我的诺言错了吗?
编辑:我忘记说了,我能看到的承诺正在得到解决(至少它击中then()
,但then()
里面的东西永远不会被最初烧制改变状态,它会调用无论是内部
您可以添加jsfiddle或plunker,因为从单行代码很难在大脑中编译它。 – Mikki
@Mikki我很想为你创建一个演示,但是不幸的是我使用了一个Angular包装器来处理SignalR,并且我确信它不会在Plunker中运行:(我只是在想'this.SetupPromise = this。$ q.resolve();'是解决承诺的最好方法,或者像'this.SetupPromise.resolve();'这样的东西可以工作,所以当前的承诺得到解决,而不是用整个承诺替换一个解决的问题 – MortenMoulder