【问题标题】:Passing parameters to promise's success callback in angularjs $q在angularjs $q中将参数传递给promise的成功回调
【发布时间】:2015-12-04 13:47:21
【问题描述】:

我意识到这是一个与one 非常相似的问题。但我仍然不清楚如何在我的情况下做到这一点。只是需要一些帮助才能成功回调。

这是有效的:

function getStuff(accountNumber) {
    var logMessage = 'POST GetStuff';

    return $http.post(GetStuff, { custId: accountNumber })
        .then(log);
}

function log(response) {
    logger.debug(response);
    return response;
}

这就是我想要完成的:

function getStuff(accountNumber) {
    var logMessage = 'POST GetStuff';

    return $http.post(GetStuff, { custId: accountNumber })
        .then(log(response, logMessage);
}

function log(response, logMessage) {
    logger.debug(logMessage, response);
    return response;
}

【问题讨论】:

    标签: javascript angularjs q


    【解决方案1】:

    你可以用这个:

    function getStuff(accountNumber) {
        var logMessage = 'POST GetStuff';
    
        return $http.post(GetStuff, { custId: accountNumber })
            .then(
               function success(response) {
                   return log(response, logMessage);
               }
            );
    }
    

    【讨论】:

    • 谢谢@Rohit,我会用这个。这是最有意义的。
    【解决方案2】:

    根据您的偏好/要求,您可以做一些事情。我通常写这样的承诺回调,所以你可以这样做:

    .then(function success(response){
      return log(response, logMessage);
    });
    

    或者,取决于你对这种方式的感受(我知道有些人不喜欢它,我尽量避免,除非绝对必要)

    .then(log.bind(null, response, logMessage));
    

    这些对你有用吗?

    【讨论】:

    • 谢谢@Shan,Rohit 先回答了,和你的第一个建议一样,所以我接受了他的回答。我无法工作,看起来确实很有趣,但你的第一个建议很好。
    【解决方案3】:

    看看能不能帮到你:

    function getStuff(accountNumber) {
      var logMessage = 'POST GetStuff';
      var deferred = $q.defer();
    
      return $http.post(GetStuff, { custId: accountNumber })
       .success(function(response){
          deferred.resolve(response);
          log(response, logMessage);
       }).error(function(){
          deferred.reject();
       })     
       return deferred.promise;
    }
    

    【讨论】:

    • 感谢@Ali,只是尝试使用 then 方法。
    • 顺便说一句,successerror 方法已弃用,取而代之的是 then() 方法。
    • 感谢提醒,但它适用于 jQuery 而不是 Angular 内部使用的 jqlite,请参阅groups.google.com/forum/#!topic/angular/ixmLu9NPm8k
    猜你喜欢
    • 2014-09-17
    • 2015-12-06
    • 2015-10-05
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2014-03-25
    相关资源
    最近更新 更多