我正在用TypeScript編寫Angular 1.x,並且我有一個負責加載數據的服務(DataService)。舉一個簡單的例子,它查詢一個節點並返回一個節點。在接口方面:如何在TypeScript中用承諾包裝返回類型?
getNode(id: number): ng.IPromise<Node>;
和實現:
getNode(id: number) {
return this.ajaxService.getNode(id)
.then((result: ng.IHttpPromiseCallbackArg<Node>) => {
return new Node(result.data.ID, result.data.Name);
});
}
不過,我想向大家介紹的是存儲這些結果並返回他們,如果我之前已經查詢了他們另一個服務。所以像這樣:
getNode(id: number) {
var loadedNode = this.storageService.nodes.filter(e => (e.ID == id));
if (loadedNode.length > 0) {
return loadedNode[0];
}
return this.ajaxService.getNode(id)
.then((result: ng.IHttpPromiseCallbackArg<Node>) => {
var n = new Node(result.data.ID, result.data.Name);
this.storageService.nodes.push(n);
return n;
});
}
但是,返回類型失敗,因爲它期待'ng.IPromise',而不是'節點'。如何包裝'return loadedNode [0];'變成某種承諾返回類型而不是返回實際的對象?
是的,就是這樣!太棒了,謝謝你! – RamblerToning
我是否必須更改界面中的返回類型?目前,它是 getNode(id:number):ng.IPromise; 但TypeScript似乎沒有彈出它應該知道返回類型是一個節點的承諾。 這不會造成任何問題,但我試圖用另一種方法 getChildren(id:number):ng.IPromise ; TypeScript不知道承諾的返回類型是一個數組 –
RamblerToning
通過將方法本身的返回類型,而不僅僅是在接口上,解決了我自己的問題。 – RamblerToning