ExpressJs ждать задания или тайм-аута - PullRequest
0 голосов
/ 04 мая 2020

У меня есть простое приложение, которое конвертирует речь в текст, но иногда API может зависнуть в зависимости от длины видео. Как я могу использовать гонку обещаний (или любой другой подход), чтобы увидеть, какая функция разрешается первой, чтобы вернуть jobid в случае тайм-аута или результат задачи в случае успешного выполнения задачи до истечения времени ожидания.

Вот моя попытка, но приложение не ждет обещанной гонки.

const taskRunner = async (data) => {
    // run the task and return the result
    return 'Hello world!';
};

const timeout = (ms) => new Promise(resolve => setTimeout(resolve('timeout'), ms));

router.post('/', async function (req, res, next) {
    try {

        var data = { jobid: 1 };
        var task = new Promise(async function (resolve, reject) {
            const result = await taskRunner({ data });
            resolve(result);
        });

        Promise.race([task, timeout(10000)]).then(function (value) {
            console.log(value);
            if(value === 'timeout'){
                data.status = "pending";
                data.tracker = `/job/${data.jobid}`
            }else{
                data.status = "completed";
                data.text = value;
            }          
        });

        res.json(data);

    } catch (error) {
        error.statusCode = 400;
        next(error);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...