【问题标题】:Bringing one value outside of an err response [duplicate]在错误响应之外带来一个值[重复]
【发布时间】:2018-05-03 16:17:20
【问题描述】:

我正在尝试获取外部事件之一并将其打印出来。当然,“答案”变量范围仅在内部。

如您所见,它获取了存储在特定日历上的所有事件的列表。我能够访问数组中的特定事件。然而。我不知道如何从中获得这一价值。

我对编码不太熟悉,不胜感激。

//my question is just above the last line.

    let google = require('googleapis');
    let privatekey = mypk.json;

    // configure a JWT auth client
    let jwtClient = new google.auth.JWT(
           privatekey.client_email,
           null,
           privatekey.private_key,
           ['https://www.googleapis.com/auth/calendar']);
    //authenticate request
    jwtClient.authorize(function (err, tokens) {
     if (err) {
       console.log(err);
       return;
     } else {
       console.log("Successfully connected!");
     }
    });



    let calendar = google.calendar('v3');

    calendar.events.list({
       auth: jwtClient,
       calendarId: 'xxxxx@group.calendar.google.com'
    }



    , function (err, response, cb) {
       if (err) {
           console.log('The API returned an error: ' + err);
           return;
       }
    var events = response.items;
    var singleEvent = events[0].summary;
    return;


    /*   if (events.length == 0) {
           console.log('No events found.');
       } else {
           console.log('Event from Google Calendar:');
           for (let event of response.items) {
               console.log('Event name: %s, Creator name: %s, Create date: %s', event.summary, event.creator.displayName, event.start.date);
           }
       }*/


    }




    );


//this is what I need to get, one event but the variable has no scope here.

    console.log ('this is the ' + singleEvent);

【问题讨论】:

  • 问题是calendar.events.list()是异步的。这意味着它将触发对 google 的请求,然后继续执行脚本。它将运行console.log(),然后在谷歌响应之后的某个时间,您的回调将被触发,您将尝试设置一个变量。您需要将singleEvent 传递给另一个函数inside 您的回调或直接处理回调中的事件。另见:stackoverflow.com/questions/14220321/…

标签: javascript scope global-variables


【解决方案1】:

calendar 之后声明变量singleEvent 像这样:

let calendar = google.calendar('v3');
let singleEvent;

在回调中执行以下操作:

singleEvent = events[0].summary;

注意:理解 Javascript 中的作用域可能是您需要学习的最重要的事情。这篇文章可能会对你有很大帮助: https://scotch.io/tutorials/understanding-scope-in-javascript

【讨论】:

  • 我可能会补充一点,理解异步操作与范围一样重要。 calendar.events.list() 是异步的,这意味着将其返回值设置为全局变量在这里并没有真正的帮助,因为 console.log() 将在设置变量之前发生。
猜你喜欢
  • 2020-01-19
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2022-01-10
  • 2017-02-08
相关资源
最近更新 更多