【发布时间】:2018-10-01 14:00:40
【问题描述】:
也许这是一个愚蠢的问题,但我花了很长时间试图解决但无法获取数据。
在下面的函数 checkMailCount 中,我有一个名为 test 的对象,其中有一个函数将值分配给邮件。 res.on('end') 通过 mailCount 分配给这个 test.mails 的值不会被保留/持久化。
'use strict';
const https = require('https');
exports.handler = (event, context, callback) => {
let session = event.session;
let request = event.request;
if (request.type === "something") {
if (request.name === "blah blah") {
let emailCount = checkMailCount(session, callback);
context.succeed(callback(null, emailCount));
}
}
function checkMailCount(session, callback) {
let url = 'https://www.googleapis.com/gmail/v1/users/me/messages?
access_token = $ {
session.user.accesstoken
} & q = "is:unread"
';
let test = {
mails: "",
mailCount: function(val) {
this.mails = val;
}
};
let data = "";
https.get(url, function(res) {
res.on('data', function(chunk) {
data += chunk;
//console.log(data);
});
res.on('end', function() {
let result = JSON.parse(data);
//result2+= result.replace('/\//g','');
test.mailCount(result["resultSizeEstimate"]);
// result["resultSizeEstimate"] inaccessible outside
});
});
return test.mails; // This is returning undefined
}
//context.fail();
}
以下是来自 gmail API 的响应 JSON
{
"messages": [
{
"id": "165f1627a53f70c6",
"threadId": "165f000031cee15b"
},
{
"id": "165f00d9e2e07737",
"threadId": "165f00d9e2e07237"
}
],
"nextPageToken": "10349401829330188334",
"resultSizeEstimate": 2
}
我需要从函数 checkMailCount 中返回 result["resultSizeEstimate"] 的值。 result 的值 result["resultSizeEstimate"] 在 res.on('end', f(){It is available here}) 内部可用,但在外部不可用。
我在 VS 代码中尝试过这个,而不是 lambda,我可以通过其他方式做到这一点。它有点难以对 lambda 函数进行单元测试。有没有办法,我可以将电子邮件计数发送到 context.succeed(callback(null, emailCount)) ?
【问题讨论】:
-
除了
const https之外,我在这段代码中看不到任何全局对象。 -
@Michael-sqlbot 编辑了我的问题 :)
标签: node.js aws-lambda