Javascript - Создание подписчика AWS SQS - PullRequest
0 голосов
/ 29 мая 2018

Дорогие люди, которые умнее меня (всех).Я пытаюсь использовать NodeJS, чтобы вытягивать AWS SQS каждые 20 секунд (длительное вытягивание).Как только он получит сообщение, функция перекодирует видео, которое может занять до 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);

1 Ответ

0 голосов
/ 29 мая 2018

После некоторой игры и отказа от идеи собственного способа проверки статуса обещания, я закончил настройку статуса вручную.Если кто-нибудь может найти лучший способ сделать это, пожалуйста, поделитесь.Ниже приведен очищенный тестовый код, который также должен быть более понятным.

// 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);
...