在另一个函数中调用函数响应(Javascript)

时间:2016-10-04 02:54:11

标签: javascript

如何在另一个功能中调用此响应?这是我的代码

function queryCoreReportingApi(profileId) {
      // Query the Core Reporting API for the number sessions for
      // the past seven days.
      gapi.client.analytics.data.ga.get({
        'ids': 'ga:' + profileId,
        'start-date': '7daysAgo',
        'end-date': 'yesterday',
        'metrics': 'ga:pageviews',
        'dimensions' : 'ga:date'
      })
      .then(function(response) {
        console.log(response);      
      })
      .then(null, function(err) {
          // Log any errors.
          console.log(err);
      });
}

我想将此函数的响应传递给另一个函数。

例如:

$scope.sample = function(){
  //call the response of function queryCoreReportingApi
};

1 个答案:

答案 0 :(得分:0)

从您的问题来看,背景并不完全清楚,但无论如何我都会采取行动。

首先,在回答您的问题之前,我担心您的代码在上面形成的方式 - 特别是您链接的两个.then()块。虽然我不知道您正在使用的特定API,但通常承诺类型API允许.then()方法传递两个参数 - 第一个是在promise成功时调用的函数,第二个函数是在出错的情况下被调用。所以我怀疑你打算输入的可能是:

function queryCoreReportingApi(profileId) {
      // Query the Core Reporting API for the number sessions for
      // the past seven days.
      gapi.client.analytics.data.ga.get({
        'ids': 'ga:' + profileId,
        'start-date': '7daysAgo',
        'end-date': 'yesterday',
        'metrics': 'ga:pageviews',
        'dimensions' : 'ga:date'
      })
      .then(function(response) {
        console.log(response);      
      }, 
      function(err) {
          // Log any errors.
          console.log(err);
      });
}

这只是预感,但我认为你应该检查一下。

现在关于您提出的问题 - 除非我遗漏了一些重要信息,您应该能够访问与queryCoreReportingApi方法相同的范围(或更高)中可用的任何方法并将其传递给来自.then的成功方法的回复。例如:

function myCustomFunction(data) {
    //do some stuff with the data
}

function queryCoreReportingApi(profileId) {
      // Query the Core Reporting API for the number sessions for
      // the past seven days.
      gapi.client.analytics.data.ga.get({
        'ids': 'ga:' + profileId,
        'start-date': '7daysAgo',
        'end-date': 'yesterday',
        'metrics': 'ga:pageviews',
        'dimensions' : 'ga:date'
      })
      .then(function(response) {
        console.log(response);
        myCustomFunction(response);      
      }, 
      function(err) {
          // Log any errors.
          console.log(err);
      });
}

这是否回答了你的问题?如果没有,请提供更多详细信息。

编辑:我在上面的编辑中看到,您似乎在使用Angular。在这种情况下,我也猜测你提供的粘贴方法是在从控制器调用的服务中。如果是这种情况,您可以扩展queryCoreReportingApi方法以接受回调方法作为第二个参数,以便在成功时调用,如下所示:

// in your controller
$scope.sample = function (data) {
    // manipulate the returned data
}
// call the service
myReportingService.queryCoreReportingApi(profileId, $scope.sample);

然后,在您的服务中:

//in your service
function queryCoreReportingApi(profileId, callback) {
      // Query the Core Reporting API for the number sessions for
      // the past seven days.
      gapi.client.analytics.data.ga.get({
        'ids': 'ga:' + profileId,
        'start-date': '7daysAgo',
        'end-date': 'yesterday',
        'metrics': 'ga:pageviews',
        'dimensions' : 'ga:date'
      })
      .then(function(response) {
        console.log(response);
        callback(response);      
      }, 
      function(err) {
          // Log any errors.
          console.log(err);
      });
}

(我也确实看到你指的是“呼唤”成功的反应。这种情况表明,回应本身就是你想要调用的方法。我认为这只是你的错误,但是如果是这种情况,就像收到它时一样简单,就像这样:

.then(function(response) {
    response();
});

但我怀疑这就是你的意思。)