У меня есть две функции. Первый - это animationFunction()
, который работает определенное количество времени. Вторым является parentFunction()
, которому требуется функция с именем dispatch()
для запуска после остановки цикла animationFunction()
. dispatch()
можно вызывать только из родительской функции:
const animationFunction = (args) => {
const duration = 1000;
//init animation function stuff...
//draw loop
const loop = drawLoop(({ time }) => {
if (time > duration) {
loop.stop();
}
});
};
const parentFunction = () => {
animationFunction(args);
//dispatch be run after animationFunction is done looping
dispatch();
}
Я думаю, animationFunction()
можно считать асинхронным, потому что требуется определенное время до l oop, прежде чем программа сможет продолжить. Я нашел способ использовать обратные вызовы, чтобы заставить dispatch()
запускаться в родительской функции после того, как animationFunction()
завершит цикл, но я запутался в том, как использовать реализацию, основанную на обещаниях. Вот мое решение для обратного вызова:
const animationFunction = (args, callback) => {
const duration = 1000;
//init animation function stuff...
//draw loop
const loop = drawLoop(({ time }) => {
if (time > duration) {
loop.stop();
callback();
}
});
};
const parentFunction = () => {
animationFunction(args, () => {
//dispatch should be run after animationFunction is done looping
dispatch();
});
}
Я запутался в решении Promise
. Я пытался сделать это:
const animationFunction = (args) => {
const duration = 1000;
//init animation function stuff...
//draw loop
const loop = drawLoop(({ time }) => {
if (time > duration) {
loop.stop();
return new Promise((resolve, reject) => {
resolve();
});
}
});
};
const parentFunction = () => {
animationFunction(args).then(() => {
dispatch();
});
}
Но, похоже, это не сработало. Что я делаю не так?