【问题标题】:angular $http / jquery complete equivalentangular $http / jquery 完全等效
【发布时间】:2013-08-11 05:44:49
【问题描述】:

有没有办法用 Angular $http 模块模拟 jquery 的“完成”回调?无论请求成功还是失败,我都有一些我想执行的代码,目前我发现自己不得不写这个:

$http.get(someUrl).success(function(){
        successCode();
        completeCode();
    }).error(function(){
        errorCode();
        completeCode();
    })

但我宁愿写这样的东西:

$http.get(someUrl).success(function(){
        successCode();
    }).error(function(){
        errorCode();
    }).complete(function(){
        completeCode();
    })

我也尝试过使用 promise API,但最终遇到了同样的问题。有什么建议吗?

【问题讨论】:

    标签: angularjs http callback promise angular-promise


    【解决方案1】:

    2014 年 8 月更新: .always 在最新版本的 Angular 中已重命名为 .finally。更喜欢.finally 而不是.always

    请注意,为了支持 IE8,您必须使用括号表示法将其称为 ["finally"]


    你可以在 AngularJS 中使用.always

    这个变化是相当新的(你可以在jQuery中做一段时间),你可以看到提交here。这要求您拥有 AngularJS 1.1.5 或更高版本。

    always(callback) - 允许您观察承诺的履行或拒绝, 但是这样做而不修改最终值。这对于释放资源或做一些事情很有用 无论承诺被拒绝还是解决,都需要进行清理。请参阅full specification 更多信息。

    Fiddle

    【讨论】:

    • 您应该提到它在 1.1.5 及更高版本中。
    • @Reno 请检查您使用的是哪个版本的 Angular 以及我添加到答案中的小提琴。
    • 它似乎不适用于当前的角度 v1.2.15。看起来总是不存在了,我收到一个错误。有什么办法解决这个问题?
    • 注意:angular documentation 包含以下附带条件,“因为 finally 是 JavaScript 中的保留字,ES3 不支持保留关键​​字作为属性名称,所以您需要调用类似 promise 的方法['finally'](回调)使您的代码兼容 IE8 和 Android 2.x。”
    • @dumbledad 这不是抄袭,因为您提供了署名 - 抄袭是指您声称内容是您自己的。明确允许在 SO 中引用和使用其他带有归属的答案 - 这就是内容许可(滚动到每一页的最底部 - 它总是在那里)。所以总结一下 - 是的,你所做的一切都很好,你不必在未来征求许可或通知我。
    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2013-07-06
    • 2018-07-19
    • 2015-04-26
    相关资源
    最近更新 更多