在回调,请求和承诺之间丢失

时间:2016-09-26 20:21:07

标签: javascript callback promise

我正在调用谷歌分析API并试图格式化我在服务器端收到的数据,然后再转到前面。具体而言,我想使用promise来对api调用中的响应应用map函数。

以下是我的Google Analytics分析API调用:

var datatable = function(req, res) {
  // authorize the client (see code above)
  authorize(function() {
    // do the actual call to the google api
    analytics.data.ga.get({
      'auth': jwtClient,
      'ids': VIEW_ID, 
      'metrics': 'ga:pageviews, ga:avgTimeOnPage',
      'dimensions': 'ga:contentGroup1, ga:searchDestinationPage',
      'start-date': '30daysAgo',
      'end-date': 'yesterday',
      'sort': '-ga:pageviews',
    }, function (err, response) {
      if (err) {
        // there was an error (unlikely, except you're trying to view a non-allowed view)
        console.log(err);
        return;
      }
      // send the data to the client (i.e. browser)
      res.send(response.rows);
    }); 
  });
}

我想使用promise来应用以下map函数map( ([x, y, z]) => ({ x, y, z }) )(稍后我会进行更多转换)。所以我尝试过这样的事情:

const formated_data = function(req, res) {
  return datatable()
   .then(function (response, error) {
    return res.send(response.map( ([x, y, z]) => ({ x, y, z }) )
});}

我尝试了各种各样的事情,但大部分时间我都有以下错误:Cannot read property 'then' of undefined。根据我的理解,我知道我的api电话并没有给我一个承诺,但是我不知道如何重构它所以它给了我一个承诺。

我正在使用快递,所以最后我需要用module.export导出我的数据:

module.exports = {
    datatable
};

编辑#1:我确实阅读了这个post和其他许多人的答案,并试图应用一些解决方案。但是我对这个Cannot read property 'then' of undefined感到困惑。我理解为什么(我的api电话没有回复承诺),但我不知道如何解决我的问题。

0 个答案:

没有答案