承诺不在https呼叫解决

我在API网关后面编写了一个AWS Lambda函数,它使用Facebook和我们的应用程序IDvalidation令牌,以便我们确认用户的身份,以便删除他的资源。 用户从Facebooklogin发送他的用户ID和令牌,我检查令牌是否有效以及是否为同一用户。 在实现中,我使用承诺,但问题是,第一个然后根本不执行。 我首先调用getFacebookAccessToken,以便我可以调用API,并在响应中解决或拒绝,但代码没有达到这一点。 这是function:

'use strict'; const https = require('https'); const querystring = require('querystring'); exports.handler = (event, context, callback) => { if (typeof event.body.token === 'undefined' || event.body.token === '') { context.succeed({ "result":"false", "message": `InputError: token is not defined or it is empty` }); return; } if (typeof event.body.userId === 'undefined' || event.body.userId === '') { context.succeed({ "result":"false", "message": `InputError: userId is not defined or it is empty` }); return; } getFacebookAccessToken() .then((appAccessToken) => { return checkFacebookId(appAccessToken, event.body.token, event.body.userId); }) .then((result) => { console.log('Done'); context.succeed(result); }) .catch((error) => { context.succeed(error); }); }; let checkFacebookId = (appAccessToken, token, facebookId) => { return new Promise((resolve, reject) => { let params = { input_token: token, access_token: appAccessToken }; let requestParams = querystring.stringify(params); let configOptions = { method: "get", hostname: "graph.facebook.com", path: "/debug_token?" + requestParams }; let request = https.request(configOptions, function (result) { let response = ""; result.setEncoding('utf8'); result.on('data', function (chunk) { response += chunk; }); result.on('end', function () { const fbResponse = JSON.parse(response); if (result.statusCode.toString() === '200') { console.log(`Validating facebook token: OK`); if (typeof fbResponse.data === 'undefined') { reject({ "result": "false", "message": "Token not valid" }); } if (fbResponse.data.user_id === facebookId) { resolve({ "result": "true" }); } else { reject({ "result": "false", "message": "Token not valid" }); } } else { reject({ "result": "false", "error": { "Message": `Failed validating facebook user access token`, "statusCode": result.statusCode, "token_valid": fbResponse } }); } }); }); request.on('error', function (error) { reject({ "result": "false", "message": "Error in Facebook", "error": error }); }); console.log(`Validating facebook token: PENDING`); request.end(); }); }; let getFacebookAccessToken = () => { return new Promise((resolve, reject) => { let params = { client_id: event.stage.fb_app_id, client_secret: event.stage.fb_app_secret, grant_type: "client_credentials" }; let requestParams = querystring.stringify(params); let configOptions = { method: "get", hostname: "graph.facebook.com", path: "/oauth/access_token?" + requestParams }; let request = https.request(configOptions, function (result) { let responseData = ""; result.setEncoding('utf8'); result.on('data', function (chunk) { responseData += chunk; }); result.on('end', function () { console.log(result); if (result.statusCode.toString() === '200') { console.log(`Getting Facebook Access Token: OK`); resolve(JSON.parse(responseData).access_token); } else { reject({ "result": "false", "error": { "Message": `Failed getting facebook access token`, "statusCode": result.statusCode } }); } }); }); request.on('error', function (error) { reject({ "result": "false", "message": "Error in Facebook", "error": error }); }); console.log(`Getting Facebook Access Token: PENDING`); request.end(); }); }; 

承诺内有一个JavaScript错误。 event.stage.fb_app_id和secret不在函数的作用域内,这是相当明显的,但是由于捕获错误是无声的,我得到一个空的对象。