我正在尝试使用Nodejs编写AWS Lambda函数。
在代码中,我必须调用一个API,等待响应并对该数据进行其他处理(我对此还没有写任何东西) 注意:很抱歉将customerTAX声明为全局,但是我更喜欢让lambda函数可以使用,然后尝试从函数isself返回值。
这是代码:
'use strict';
var customerTAX;
const https = require('https');
const options = {
host: 'xxxxxxx.com',
port: 443,
path: '/yyyyyyy.json',
method: 'POST',
headers: {
'Content-Type': 'application/graphql',
}
};
exports.handler = async (event) => {
const body = JSON.parse(event.body);
const orderId = body.id;
const customerId = body.customer.id;
console.log('ORDER ID: ' + orderId);
console.log('CUST ID: ' + customerId);
const query = `xxxxxxxxxxxxxxxxxxxx`;
//I CAN SEE ALL LOGS OF THIS FUNCTION IN CLOUDWATCH
await getCustomerTAX(query);
//I CAN'T SEE NOTHING BELOW THIS LINE IN AWS CLOUDWATCH
console.log('CUST TAX: ' + customerTAX);
if (customerTAX != null) {
console.log('LETs GO TO SAVE IT')
} else {
console.log('NOTAX: No customerTAX');
}
const response = {
statusCode: 200,
body: JSON.stringify(event.body),
};
return response;
};
var getCustomerTAX = function(query) {
return new Promise(function(resolve, reject) {
var req = https.request(options, function(res) {
res.setEncoding('utf8');
var bodyRaw = '';
res.on('readable', function () {
var chunk = this.read() || '';
bodyRaw += chunk;
console.log('getTAX CHUNK (' + Buffer.byteLength(chunk) + ' bytes): ' + chunk);
});
res.on('end', function () {
const body = JSON.parse(bodyRaw);
if (body.TAX.value != null) {
customerTAX = body.TAX.value;
} else {
customerTAX = null;
}
console.log("getTAX END: " + customerTAX);
resolve;
//console.log('body: ' + Buffer.byteLength(body) + ' bytes');
});
});
//handle the possible errors
req.on('error', function(e) {
console.log("ERROR: " + e);
reject(e);
});
//do the request
req.write(query);
//finish the request
req.end();
});
};
函数getCustomerTAX可以完美地工作,但是我不知道为什么我的lambda函数在这一行中“完成”了,并且在cloudwatch中看不到更多的控制台日志。
希望您的回答非常感谢。
答案 0 :(得分:0)
对于getCustomerTax()
中的入门者,resolve;
必须为resolve();
。
这是一个功能。您需要调用它。
不调用resolve()
,则诺言将永远无法解决,因此await getCustomerTax()
不会完成,其后的行也不会执行。
仅供参考,request-promise
module将自动完成getCustomerTax()
中的所有工作(发出http请求,获取响应,处理所有可能的错误并返回表示结果的承诺)。