Один из вариантов: elementVisualize
возвращает Promise
, который разрешается при очистке прямоугольника, и await
, что Promise
на каждой итерации цикла for
:
function elementVisualize(ele){
var eleVis = canvas.getContext('2d');
eleVis.fillText(ele,150,150);
return new Promise((resolve) => {
setTimeout(function(){
eleVis.clearRect(100,80,148,148);
resolve();
}, 1000);
});
}
async postFix(exp){ // Stack.postFix function
for(var i = 0; i < exp.length ; i++){
var c = exp[i];
if((c>='0' && c<='9') || (c>='A' && c<='Z') || (c>='a' && c<='z')){
await elementVisualize(c);
}
}
Если метод postFix
также может быть вызван снова до того, как все анимации будут выполнены, и вы хотите, чтобы он ожидал завершения анимаций предыдущего вызова postFix
, вы можете рассмотреть постоянную сортировку очередей, к которой postFix
выдвигает элементы (символы exp
) и получает elementVisualize
shift()
элемент из этого массива, а затем снова вызывает себя после анимации, если в массиве остаются некоторые символы.