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