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

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

目前这样称呼:

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


其中“ listEvents”是传递给回调的函数:

function authorize(credentials, callback) {


我尝试将return语句添加到ListEvents,然后这样做:

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

最佳答案

我不知道Google Calendar API,但是快速阅读第二个参数是回调函数。这意味着授权结果将结束,然后将调用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
    })
);


编辑:对代码的小修正。

09-25 20:07