Javascript 从amazon lambda发送post请求时出现问题
在将消息从amazon队列(sqs)检索到API之后,我试图通过amazon lambda函数发送POST中的http请求。 API将这些消息集成到我的数据库中。 为此,我在承诺系统中使用Node.js,但当我在队列中发送大量消息时,请求不会被发送,我不明白为什么 我尝试了几种方法,包括允诺,但都没有成功Javascript 从amazon lambda发送post请求时出现问题,javascript,node.js,aws-lambda,amazon-sqs,Javascript,Node.js,Aws Lambda,Amazon Sqs,在将消息从amazon队列(sqs)检索到API之后,我试图通过amazon lambda函数发送POST中的http请求。 API将这些消息集成到我的数据库中。 为此,我在承诺系统中使用Node.js,但当我在队列中发送大量消息时,请求不会被发送,我不明白为什么 我尝试了几种方法,包括允诺,但都没有成功 const http = require('http'); var promises = []; const options = { host: process.env.Host,
const http = require('http');
var promises = [];
const options = {
host: process.env.Host,
path: process.env.Path,
port: process.env.Port,
method: process.env.Method
};
exports.handler = async (event, context) => {
event.Records.forEach(record => {
const {
body
} = record; // the messages from the bus
promises.push(PromiseCreator(body));
Promise.all(promises)
.then(function(data) {})
.catch(function(err) {
return err
});
});
};
function PromiseCreator(body) {
return new Promise((resolve, reject) => {
const req = http.request(options, (res) => {
resolve('succès');
});
req.on('error', (e) => {
reject(Error(e));
});
// send the request
req.write(body);
req.end();
});
}
我认为问题来自于forEach,但我不知道我必须在哪里提出请求。你可能是对的
尝试将承诺。所有
放在forEach
之外
您可以使用等待
代替。然后
exports.handler=async(事件、上下文)=>{
event.Records.forEach(记录=>{
const{body}=record;//来自总线的消息
承诺。推送(承诺创造者(身体));
});
试一试{
等待承诺。所有(承诺);
}捕捉(错误){
返回错误;
}
};
我认为真正的问题是,您的请求函数在不侦听错误的情况下立即解决了成功问题,这是没有用的。名为PromiseCreator
的函数应具有如下示例所示的结构:
function PromiseCreator(body) {
return new Promise((resolve, reject) => {
const req = http.request(options, (res) => {
if (res.statusCode !== 200) {
reject("Connection error");
}
res.on('error', (error) => {
reject(error);
});
});
req.on('error', (e) => {
reject(Error(e));
});
req.on("finish", () => {
resolve("success");
})
// send the request
req.write(body);
req.end();
});
}
谢谢它是有效的,但我认为我没有掌握窍门,那么“then”和“await”之间的区别是什么呢?基本上唯一的区别是sintax更等同于同步语言。。。您可以在此处阅读更多内容: