首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:在Google调用之外的值为null

:在Google调用之外的值为null
EN

Stack Overflow用户
提问于 2017-04-24 15:00:07
回答 1查看 74关注 0票数 0

我正在为一个特定事件调用Google,并且能够获得递归值。

代码语言:javascript
复制
  function getRecurrence(payload) {
    console.log('payload = ' + payload);
    var recurrence = '';
    if (payload != undefined) {
      var requestRecurringEvent = window.gapi.client.calendar.events.get({
        'calendarId': 'primary',
        'eventId': payload
      });
      requestRecurringEvent.execute(function(resp) {
        console.log('requestRecurringEvent = ' + resp);
        console.log('requestRecurringEvent.recurrence = ' + resp.recurrence);
        recurrence = resp.recurrence;

        console.log('recurrence (inside execute)= ' + recurrence); //NO ISSUE (YET): recurrence (inside execute) = RRULE:FREQ=WEEKLY;COUNT=10

        return recurrence;
      });
    } else {
      return 'no recurrence value';
    }
  }

但是,当我将递归值返回给变量时

代码语言:javascript
复制
var recurrence = getRecurrence(action.payload.calendarEventRecurringEventId);
console.log('recurrence (outside execute) = ' + recurrence);  //ISSUE: recurrence (outside execute) = undefined

注意:action.payload.calendarEventRecurringEventId是因为我在redux中传递来自有效负载的值。

为什么在api调用中定义了值,但在api调用之外没有定义??

谢谢!

更新

由于console.log('recurrence (outside execute) = ' + recurrence)打印了一个值,所以承诺似乎把我带到了正确的方向,但是它似乎还没有完全解决这个问题,因为仍在为redux中的值设置一个空字符串。

代码语言:javascript
复制
var recurrencePromise = new Promise(function(resolve, reject) {
      var payload = action.payload.calendarEventRecurringEventId;
      console.log('action.payload.calendarEventRecurringEventId = ' + payload);
      var recurrence = '';
      if (payload != undefined) {
        console.log('getRecurrence payload != undefined');
        var requestRecurringEvent = window.gapi.client.calendar.events.get({
          'calendarId': 'primary',
          'eventId': payload
        });
        requestRecurringEvent.execute(function(resp) {
          console.log('requestRecurringEvent = ' + resp);
          console.log('requestRecurringEvent.recurrence = ' + resp.recurrence);
          recurrence = resp.recurrence;
          console.log('recurrence (inside execute)= ' + recurrence);
          resolve(recurrence);
        });
      } else {
        reject(Error("It broke"));
      }
    });

    recurrencePromise.then(function(recurrence) {
      console.log('recurrence (outside execute) = ' + recurrence);
      var recurrenceTemp = 'RRULE:FREQ=WEEKLY;COUNT=10';
      return {
        ...state,
        calendarEventEndDate: action.payload.calendarEventEndDate,
        calendarEventEndDateTime: action.payload.calendarEventEndDateTime,
        calendarEventEndTime: action.payload.calendarEventEndTime,
        calendarEventID: action.payload.calendarEventID,
        calendarEventTitle: action.payload.calendarEventTitle,
        calendarEventRecurringEventId: defaultIfUndefined(action.payload.calendarEventRecurringEventId, ''),
        calendarEventRecurrence: recurrence, //ISSUE: this is where the value should be something like `RRULE:FREQ=WEEKLY;COUNT=10` instead of `''`
      }
    }, function(err) {
      console.log(err); // Error: "It broke"
    });

为什么仍然没有在api调用之外定义正确的值?

EN

回答 1

Stack Overflow用户

发布于 2017-04-24 22:05:11

由于requestRecurringEvent.execute函数是异步的,这意味着您永远无法判断异步函数何时完成其执行(返回),而不像保证返回值的同步函数那样,异步不知道。如果您想使用外部的递归值,您需要做的是,A)使用回调函数B)使用承诺(我相信默认情况下google调用提供了这些承诺)

我建议您在javascript中阅读更多有关异步性的内容,以了解它的工作原理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43591521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档