Я работаю над веб-инструментом визуализации алгоритмов, использующим javascript, поэтому ему нужна пауза во время выполнения. Чтобы приостановить выполнение, я использовал const delay = ms => new Promise(res => setTimeout(res, ms));
и вызвал функцию await delay(500);
, которую я обнаружил при переполнении стека, она отлично работала с нерекурсивным алгоритмом. А чтобы сделать рекурсивный алгоритм последовательным, я использовал return new Promise((resolve,reject)
и .then()
. но теперь я не могу использовать ожидание внутри return new Promise
, в чем причина, и я на правильном пути? мой код выглядит так (быстрая сортировка)
const quick = async(low, high) =>
{
return new Promise((resolve,reject) =>
{
if (low < high)
{
var pivot = color[high]
var i = low -1
for(var j = low; j <= high - 1; j++)
{
// I want some delay here
if(color[j] < pivot)
{
i++
swap(i,j)
// delay here
}
}
var pi = i+1;
swap(pi,high)
// and delay here
quick( low, pi - 1).then(quick( pi + 1, high));
}
resolve();
});
}