У меня есть простое приложение, которое конвертирует речь в текст, но иногда 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);
}
});