Node.js 如何返回充满邮件内容的数组?

Node.js 如何返回充满邮件内容的数组?,node.js,gmail-api,Node.js,Gmail Api,我是新来的有承诺的人,我正试图在gmail的承诺完成后归还尸体 app.get('/', (req, res) => { var body =[]; if (!authed) { // Generate an OAuth URL and redirect there const url = oAuth2Client.generateAuthUrl({ access_type: 'offline',

我是新来的有承诺的人,我正试图在gmail的承诺完成后归还尸体

app.get('/',  (req, res) => {
    var body =[];

    if (!authed) {
        // Generate an OAuth URL and redirect there
        const url = oAuth2Client.generateAuthUrl({
            access_type: 'offline',
            scope: 'https://www.googleapis.com/auth/gmail.readonly'
        });
        console.log(url)
        res.redirect(url);
    } else {
        
        // getmail(), function(stories) {
        //     console.log(stories);
        // };
        getmail().then(function(gmail) {
            console.log("mails"); // "Success"

            console.log(gmail); // "Success"
          }, function(value) {
          });
}
getmail = async function(){
    const gmail = await google.gmail({ version: 'v1', auth: oAuth2Client });
    const body = [];

    await  gmail.users.messages.list({
        'userId': 'me',
        'labelIds': 'UNREAD',
        'maxResults': 10
      }, (err, res) => {
            if (err) return console.log('The API returned an error: ' + err);
            const  msgs= res.data.messages;
            if (msgs.length == 0) {
                console.log('No labels found.');

            } else {
                console.log('Messages:');
                the_format = 'full';
                for (var i = 0; i < msgs.length; i++) {
                  var msg = msgs[i];
                   body[i] =  gmail.users.messages.get({
                    auth: oAuth2Client,
                    userId: 'me',
                    id: msg.id,
                    payload:msg.payload,
                    format: the_format,
                  }, function(err, response) {
                    if (err) {
                       console.log('The API returned an error: ' + err);
                       return;
                    }
                    else{
                        console.log("Returning")
                        return response.data.payload.parts[0].body.data;
                    }
                  });
                  console.log(body[i])

                }  
            }
        });
        console.log(body);
        return Promise.all(body,gmail);
    }
})
app.get('/',(req,res)=>{
变量体=[];
如果(!已授权){
//生成一个OAuth URL并重定向到那里
const url=oAuth2Client.generateAuthUrl({
访问类型:“脱机”,
范围:'https://www.googleapis.com/auth/gmail.readonly'
});
console.log(url)
res.redirect(url);
}否则{
//getmail(),函数(故事){
//console.log(故事);
// };
getmail().then(函数(gmail){
console.log(“邮件”);/“成功”
console.log(gmail);/“成功”
},函数(值){
});
}
getmail=异步函数(){
const gmail=wait google.gmail({version:'v1',auth:oAuth2Client});
常量体=[];
等待gmail.users.messages.list({
'userId':'me',
“labelIds”:“未读”,
“maxResults”:10
},(误差、分辨率)=>{
if(err)返回console.log('API返回错误:'+err);
const msgs=res.data.messages;
如果(msgs.length==0){
console.log('未找到标签');
}否则{
log('Messages:');
_格式='full';
对于(变量i=0;i

我肯定我做错了什么,我只是不知道是什么,邮件被加载了,但函数从不等待正文填充,返回的是空的。我还尝试了body.push(response.data.payload.parts[0].body.data;),但仍然返回空的

不确定问题到底出在哪里。你能实现日志来确定在什么时候代码的工作方式与你期望的不同吗?我使用了日志,console.log(gmail)和console.log(body);是空的,它似乎没有等待它,然后它在promise console.log(body[i])中再次打印它,并将其填充