【问题标题】:Callback returning undefined回调返回未定义
【发布时间】:2016-11-18 13:05:54
【问题描述】:

我正在尝试从 GMail API 获取数据,以便能够从那里加载 base64 加密的附件数据,但当我尝试返回它时,我得到了未定义。

$Message['Content']['Attachment'][$Count]['Data'] = getAttachments($Message['Details']['ID'], message['payload']['parts'][key], function (filename, mimeType, attachment) {
    return 'data:'+mimeType+';base64,'+attachment.data.replace(/-/g, '+').replace(/_/g, '/');
});


function getAttachments(messageID, parts, callback) {
     var attachId = parts.body.attachmentId;
     var request = gapi.client.gmail.users.messages.attachments.get({
          'id': attachId,
          'messageId': messageID,
          'userId': 'me'
     });
     request.execute(function (attachment) {
           callback(parts.filename, parts.mimeType, attachment);
     });
}

问题似乎是在函数返回一个值之后数据才可用。这已经通过 console.log() 进行了测试。

【问题讨论】:

    标签: javascript jquery asynchronous callback gmail-api


    【解决方案1】:

    这不是返回 undefined 的回调 - 它是 getAttachments()

    对 GMail API 的调用是异步的,因此您不能以这种方式分配给 $Message...['Data'] - 实际上您分配的是 getAttachments() 的结果,它不会返回任何内容,因此是 undefined

    在您进入实际回调之前,您将无法获得可用数据,因此您需要在回调本身中设置值:

    getAttachments($Message['Details']['ID'], message['payload']['parts'][key], function (filename, mimeType, attachment) {
        var data = 'data:'+mimeType+';base64,'+attachment.data.replace(/-/g, '+').replace(/_/g, '/');
    
        // now you have the data, you can set the property
        $Message['Content']['Attachment'][$Count]['Data'] = data;
    });
    

    您可能还必须将您的 $Message 的其他处理移到此处,例如发送。

    【讨论】:

      【解决方案2】:

      getAttachments() 函数没有返回任何值,这就是为什么它是undefined

      解决办法:

      getAttachments($Message['Details']['ID'], message['payload']['parts'][key],function (filename, mimeType, attachment) 
      {
          $Message['Content']['Attachment'][$Count]['Data'] =  'data:'+mimeType+';base64,'+attachment.data.replace(/-/g, '+').replace(/_/g, '/');
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        • 2018-02-20
        • 2016-01-05
        • 2016-04-05
        • 2023-03-16
        • 1970-01-01
        • 2019-11-17
        相关资源
        最近更新 更多