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
});