【问题标题】:Straightforward migration AngularJS Promises from Success/Error to Then直接迁移 AngularJS Promises 从 Success/Error 到 Then
【发布时间】:2016-05-29 00:03:05
【问题描述】:

关于如何从 Angular 1.3 Promise 迁移到 Angular 1.5 Promise,我刚刚遇到了一个问题(以我的名义非常愚蠢),这不是代码方面的问题,而是我使用它们的方式。然而我可能不是这个星球上最愚蠢的人,所以我指的是你,乔伊,我唯一的下等:-p

我使用 promise 作为方法(例如服务方法)的结果,因此解析器会知道发生了什么。例如

function myLogin(user,pass) {
    return $http({url:'/auth/login', data:{user:user,pass:pass}).
           success(function (r) { loggedin = true; }).
           error(function (r) { loggedin = false; });
}

然后我也可以写:

myLogin("Joe","12345").success(function (r) { console.log("WOW!"); }).
                      .error(function (r) { console.error(":-("); });

现在,在将成功/错误替换为 then 之后,如果您保留此代码形式,这将不再可能这是因为then 不是返回原来的promise,而是函数执行的结果。

所以如果我写:

function myLogin(user,pass) {
    return $http({url:'/auth/login', data:{user:user,pass:pass}).
           then(function (r) { loggedin = true; } ,
                function (r) { loggedin = false; });
}

myLogin("Joe","12345").then(function (r) { console.log("WOW!"); },
                            function (r) { console.error(":-("); });

下面的then 正在获取第一对函数(无论执行哪个)返回的内容!

我该怎么办?

提示:我读过有一个选项可以通过 $http 提供程序重新启用成功/错误,但这不会持续很长时间...

【问题讨论】:

    标签: angular-promise


    【解决方案1】:

    嗯,答案很简单,因为我一开始没有意识到,所以我花了一个小时搜索却没有结果。没问的都是对的!

    您所要做的(亲爱的乔伊)就是修改myLogin 函数并遵守最初的承诺。然后应用它,并从函数返回那个 original 承诺。即

    function myLogin(user,pass) {
        var promise = $http({url:'/auth/login', data:{user:user,pass:pass});
        promise.then(function (r) { loggedin = true; } ,
                     function (r) { loggedin = false; });
        return promise;
    }
    
    myLogin("Joe","12345").then(function (r) { console.log("WOW!"); },
                                function (r) { console.error(":-("); });
    

    通过这种方式,进行这种最小的调整,您可以轻松地进行迁移。 当然,允许您选择要返回的内容的新 then 想法更强大,如果您有时间重新设计代码,可能会在许多方面变得更好。

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 2016-05-26
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 2020-05-21
      • 2011-07-06
      • 2015-05-08
      • 2013-08-04
      相关资源
      最近更新 更多