我試圖解決從我的服務到我的控制器的承諾。
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