Мне нужно знать, когда вся работа, инициированная вызовом функции, завершена.
У меня есть функция, которая принимает другую функцию в качестве параметра и вызывает эту функцию:
function outer(inner) {
inner()
}
Внутренняя функция может инициировать некоторое асинхронное поведение:
function inner() {
new Promise(...)
new Promise(...)
new Promise(...)
requestAnimationFrame(...)
requestAnimationFrame(...)
}
Я знаю, как работает Promise.all
. Но для Promise.all вам нужно передать массив обещаний. Я хочу, чтобы моя функция не знала деталей того, что происходит внутри внутренней функции. Поскольку javascript обрабатывает много асинхронного поведения с обратными вызовами вместо обещаний, Promise.all не может обрабатывать все случаи асинхронной работы.
Из области действия внешней функции, есть ли способ определить, завершена ли асинхронная и синхронная работа внутренней функции, и применить ли это поведение к любой функции, которую я передаю в outer
?
function outer(inner) {
inner.allWorkComplete(() => ...do more work)
inner();
}
Я пытаюсь избежать жесткого кодирования этого во внутренней функции, потому что это лишает смысла создание функции более высокого порядка для обработки события allWorkComplete
.
Это просто анти-паттерн в javascript?