Javascript 关于用angular和typescript链接$q承诺的困惑
我对Javascript 关于用angular和typescript链接$q承诺的困惑,javascript,angularjs,typescript,promise,q,Javascript,Angularjs,Typescript,Promise,Q,我对Q、promises、angular、以及typescript,都缺乏经验,所以显然明智的选择是尝试将它们结合使用 基本上,我有一些方法设置来返回Q.IPromise,这样我可以将然后(f)语句链接到它们上。两者都很好 public Clear = (): Q.IPromise<IArticle> => { var deferred = this.$q.defer(); this.$http({ url: String
Q
、promises
、angular
、以及typescript
,都缺乏经验,所以显然明智的选择是尝试将它们结合使用
基本上,我有一些方法设置来返回Q.IPromise
,这样我可以将然后(f)
语句链接到它们上。两者都很好
public Clear = (): Q.IPromise<IArticle> => {
var deferred = this.$q.defer();
this.$http({
url: String.format('{0}{1}', this.$settings.uri(), '/api/cancel/article'),
responseType: 'json',
method: 'GET',
withCredentials: true
}).then((response: IArticleRequest) => {
deferred.resolve(response.data.article);
}, (response) => {
deferred.reject(null);
});
return deferred.promise;
}
public Fetch = (id: string):Q.IPromise<IArticleRequestData> => {
var deferred = this.$q.defer();
this.$http({
url: String.format('{0}{1}{2}', this.$settings.uri(), '/api/articles/fetch/', id),
responseType: 'json',
method: 'GET',
withCredentials: true
}).then((response: IArticleRequest) => {
deferred.resolve(response.data);
}, (response) => {
deferred.reject(null);
});
return deferred.promise;
}
这很好——正如我所期望的那样
但是现在,我需要另一个步骤——最后一个电话。另一个然后(f)
函数在最外层函数上运行,但直到最内层函数完成后才出现
总之,我需要这个
$articles.Fetch(1).then((r: IArticleRequestData) => {
$articles.Clear().then((n:IArticle) => {
// inner function completed
})
}).then((l:any)=> {
// occurs after everything else is done and inner
// functions are finished
});
我现在很难弄清楚如何做到这一点。这在承诺的工作方式中是可能的吗
附加说明
向内部部分添加另一个函数是允许的,但感觉是错误的方法。如果我完全无法理解我询问的方式,或者如果我试图这样做的方式是错误的,那么这就是我的“修复”
我希望额外的
然后在外部,因为内部方法实际上负责解决某些问题,因此它们可能会分裂成其他切线或延迟的方法。只需从内部函数返回如下承诺:
$articles.Fetch(1).then((r: IArticleRequestData) => {
return $articles.Clear()
}).then((l:any)=> {
// occurs after everything else is done and inner
// functions are finished
});
Hrnm。这仅在调用Clear
函数时有效。如果在第一个then()
中发生了不同的情况,我还能做些什么来达到这一步呢?我不知道你的意思。您可以返回方法内部的任何承诺,然后返回方法并链接到该方法。既然你可以做出自己的承诺,你就可以让他们做任何你想做的事。我想我理解。非常感谢你!
$articles.Fetch(1).then((r: IArticleRequestData) => {
return $articles.Clear()
}).then((l:any)=> {
// occurs after everything else is done and inner
// functions are finished
});