Javascript(NodeJS):如何从Google Calendar API回调中获取数据

时间:2017-12-01 18:03:42

标签: javascript asynchronous callback google-calendar-api

关于此示例:https://developers.google.com/google-apps/calendar/quickstart/nodejs

我想更改listEvents以返回事件的JSON数组。

目前这样称呼:

authorize(JSON.parse(content), listEvents);

where" listEvents"是传递给回调的函数:

function authorize(credentials, callback) {

我尝试向ListEvents添加一个return语句,然后再添加:

var jsonEvents = authorize(JSON.parse(content), listEvents);
console.log("Json Events="); 
console.log(jsonEvents); 

我知道它对我来说是异步的,因为我在listEvents函数的console.log输出之前得到了上面的console.logs。 我也试过投入" await"一句话,但没有运气。

我尝试在listEvents中设置一个额外的参数:

var jsonEvents; 
authorize(JSON.parse(content), listEvents(jsonEvents));
console.log("Json Events="); 
console.log(jsonEvents); 

导致" typeError:回调不是函数"。

更新:根据@Tuches的回答,我得到了这个工作。想知道是否有必要扩大这一点。

  authorize(JSON.parse(content), function(token) {
      console.log("Got Token"); 
      //console.log(token);
      listEvents(token, function(jsonResult) {
          console.log("Json Callback Events="); 
          console.log(jsonResult); 
      }); 
    });

1 个答案:

答案 0 :(得分:1)

我不了解谷歌日历API,但快速阅读第二个参数是回调函数。这意味着authorize的结果将结束,然后将调用listEvents。所以实际上你应该做的是处理这个数据在listEvents中返回,或者你可以修改listEvents来返回一个回调,如:

function listEvents(auth, callback) {
    // ... implementation of the function
    // When the function is done an there's data to
    // return, callback the data
    callback(data);
}

这样你就可以通过这样做来处理从listEvents返回的数据:

authorize(JSON.parse(content), listEvents(data, function(response) {
        console.log(response); // <-- return from listEvents    
    })
);

编辑:代码的小修正。