javascript - 对使用 angular 和 typescript 链接 $q promises 感到困惑

标签 javascript angularjs typescript promise q

我对 Q 还很陌生, promises , angular , 和 typescript - 所以看起来显然明智的选择是尝试同时使用它们!

基本上我设置了一些方法来返回 Q.IPromise<T>这样我就可以链接 then(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;
    }

所以我可以像这样使用它们;

$articles.Fetch(1).then((r: IArticleRequestData) => {
    $articles.Clear().then((n:IArticle) => {
        console.log('completed!');
    })
});

效果很好 - 正如我所料。

但现在,我需要另一个步骤 - 类似最后的调用。另一个then(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
});

我很难弄清楚如何实现这一目标。这甚至可以通过 promises 的工作方式实现吗?

补充说明

向内部部分添加另一个功能是允许的,但感觉是错误的方法。如果我完全无法弄清楚我要问的方式,或者我尝试做的方式是错误的,这就是我要“修复”的方法。

我想要额外的 then在外面,因为内部方法实际上负责解决某些事情,因此它们可能会 split 成其他切线或 deferred方法也是如此。

最佳答案

像这样从内部函数返回 promise :

$articles.Fetch(1).then((r: IArticleRequestData) => {
    return $articles.Clear()
}).then((l:any)=> {
    // occurs after everything else is done and inner
    // functions are finished
});

关于javascript - 对使用 angular 和 typescript 链接 $q promises 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36895086/

相关文章:

javascript - 如何克服将单个静态值传递给函数的问题?

javascript - 使用 AngularJS 函数进行排序

angular - ionic pro 中的远程构建失败 - 找不到模块 './_rules'

javascript - 如何在 Angular 组件之间传递 bool 值以切换样式的显示

typescript - 为什么 $ 在 Angular 2 中不被识别?

javascript - 有没有办法检测何时要从 DOM 中删除 DOM 节点?

javascript - 使用随机数学来选择和放置图像

angularjs - 在 $resource 上发送请求正文

javascript - 返回一个 Promise,而不是用 Angular 的 $q.then() 来解决它

javascript - 在 ColdFusion 中解析 JSON 时出现问题