繁体   English   中英

Javascript-创建AWS SQS订阅服务器

[英]Javascript - Create AWS SQS Subscriber

亲爱的人,比我(每个人)都聪明。 我正在尝试使用NodeJS每20秒拉一次AWS SQS(长时间拉)。 确实拉出消息后,该功能将对视频进行转码,最多可能需要5分钟才能完成。

问题:如果我仍在处理视频,我不想提取AWS SQS。 因此,如果我的诺言未能兑现,我需要我的setInterval函数来跳过aws.SQS.recieveMessage函数。 有人知道这样做的好方法吗?

这是我的可怕测试,以查看是否可以理解这些概念(不起作用):

 // Quick Testbed let asyncthingy = asyncCall(); const testTimer = () => { if (!asyncthingy.promise){ asyncthingy = asyncCall(); } console.log("I executed the specified function"); } function resolveAfter4Seconds() { return new Promise(resolve => { setTimeout(() => { resolve('resolved'); },4000); }); } async function asyncCall() { console.log("I'm the async call"); let result = await resolveAfter4Seconds(); } setInterval(testTimer, 1500); 

经过一番摸索并放弃了检查承诺状态的本机方法的想法,我最终手动设置了状态。 如果有人能找到更好的方法,请分享。 下面是清理过的测试代码,它们也应该更加清晰。

 // Quick Testbed var transcoderstatus = 0; async function startSQSListener() { if (!transcoderstatus){ transcoderstatus = 1; let result = await checkSQSQueue(); transcodeVideo(); } //console.log("Transcoder Status: ",transcoderstatus); } function checkSQSQueue() { console.log("Checking SQS Queue"); return new Promise(resolve => { setTimeout(() => { console.log("Pulled new message"); resolve('resolved'); },2000); }); } function transcodeVideo() { transcoderstatus = 1; console.log("Transcoding Video"); return new Promise(resolve => { setTimeout(() => { transcoderstatus = 0; console.log("Transcoding completed"); console.log("---------------"); resolve('resolved'); },10000); }); } setInterval(startSQSListener, 1500); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM