如何处理Gmail-API的承诺和回报?

时间:2019-06-27 10:05:02

标签: javascript node.js promise gmail-api

我目前正在尝试使用Gmail-API进行操作,但是很遗憾,我无法创建getter方法,因为google函数是异步的。

所以我基本上有两个功能:

function doSomething() {
    let mailArray = [];

    fs.readFile('credentials.json', (err, content) => {
        mailArray = getBackupsMails(authorize(JSON.parse(content)));
    });

    // do something with mailArray
}
function getMails(auth) {
    let mailArray = [];

    gmail.users.messages.list({auth: auth, userId: 'me'}, function(err, response) {
        let messagesArray = response.data.messages;

        messagesArray.forEach((message) => {
            gmail.users.messages.get({ auth: auth, userId: 'me', id: message.id }, function(err, response) {
                message_raw = response.data.snippet;
                text = message_raw.substring(16, 55);
                mailArray.push(text);
            });
        });

    });

    return mailArray;
}

不幸的是,mailArray是未定义的。如何获得填充数组?

1 个答案:

答案 0 :(得分:1)

由于API调用是异步的,因此仅在API调用完成后才能访问填充数组。目前,return mailArray;在API调用完成之前被执行。

要获取发送给getMails()呼叫者的实际电子邮件,您还需要使getMails()异步-使用async / await,promise或callback。

正如ponury-kostek所说,有关详细信息,请参见How do I return the response from an asynchronous call?