Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将参数传递给promise';s在angularjs$q中的成功回调_Javascript_Angularjs_Q - Fatal编程技术网

Javascript 将参数传递给promise';s在angularjs$q中的成功回调

Javascript 将参数传递给promise';s在angularjs$q中的成功回调,javascript,angularjs,q,Javascript,Angularjs,Q,我意识到这是一个与此非常相似的问题。但在我的情况下,我还不清楚该怎么做。只是需要一些成功回调的帮助 这就是工作原理: function getStuff(accountNumber) { var logMessage = 'POST GetStuff'; return $http.post(GetStuff, { custId: accountNumber }) .then(log); } function log(response) { logger

我意识到这是一个与此非常相似的问题。但在我的情况下,我还不清楚该怎么做。只是需要一些成功回调的帮助

这就是工作原理:

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;
}
您可以使用以下选项:

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

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

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

.then(function success(response){
  return log(response, logMessage);
});
或者,取决于你对这种方式的感受(我知道有些人不喜欢,我尽量避免,除非是绝对的Nessery)


以下哪一项对您有用?

看看它是否能帮助您:

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

谢谢@Rohit,我会用这个。这是最有意义的。谢谢@Shan,Rohit首先回答了你的第一个建议,所以我接受了他的回答。我无法让bind工作,它看起来确实很有趣,但你的第一个建议很好。谢谢@Ali,只是尝试使用then方法。顺便说一句,
success
error
方法被弃用,取而代之的是
then()
方法。谢谢提醒,但这是针对jQuery的,而不是针对Angular内部使用的jqlite的,请参见此
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;
}