我正在调用谷歌分析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电话没有回复承诺),但我不知道如何解决我的问题。