У меня есть функция, которая выполняет длительные вычисления, и после ее завершения вызывает функцию обратного вызова, которая передается в качестве параметра.Я запрашиваю эту функцию в роутере Koa и мне нужно вернуть браузеру результаты длительных вычислений.Функция поступает из библиотеки, и я не могу изменить ее интерфейс (т.е. я могу изменить код обратного вызова, но я не могу изменить someLongComputation
, чтобы вернуть обещание)
Текущие наборы кодов ctx.body
сразу же, как someLongComputation
немедленно возвращается.Любая идея, как я могу ждать, пока не будет вызван обратный вызов, и только затем установить ctx.body
с результатами обратного вызова.
router.post(`/abc`, async (ctx) => {
try {
someLongComputation(function(err, res) {
if(err) {
console.log(err);
}
}
ctx.body = {
status: 'success',
data: {'res' : ""},
errors: []
};
} catch (err) {
console.log(err)
}
})