Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从amazon lambda发送post请求时出现问题_Javascript_Node.js_Aws Lambda_Amazon Sqs - Fatal编程技术网

Javascript 从amazon lambda发送post请求时出现问题

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,

在将消息从amazon队列(sqs)检索到API之后,我试图通过amazon lambda函数发送POST中的http请求。 API将这些消息集成到我的数据库中。 为此,我在承诺系统中使用Node.js,但当我在队列中发送大量消息时,请求不会被发送,我不明白为什么

我尝试了几种方法,包括允诺,但都没有成功

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更等同于同步语言。。。您可以在此处阅读更多内容: