ExpressJs等待任务或超时

时间:2020-05-04 14:12:22

标签: javascript node.js express

我有一个简单的应用程序,可以将语音转换为文本,但是有时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);
    }
});

0 个答案:

没有答案