我正在使用JavaScript使用基于网络的算法可视化工具,因此在执行过程中需要暂停。为了暂停执行,我使用了const delay = ms => new Promise(res => setTimeout(res, ms));
并调用了函数await delay(500);
,我在堆栈溢出时发现了该函数,它在非递归算法下可以正常工作。为了使递归算法具有顺序性,我使用了return new Promise((resolve,reject)
和.then()
。但是现在我无法在return new Promise
内使用await,这是什么原因,我走上了正轨吗?
我的代码看起来像这样(快速排序)
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();
});
}
答案 0 :(得分:1)
您不需要return new Promise(...
,因为异步函数已经返回了Promise。您不能使用await
,因为Promise处理程序不是异步函数。试试这个:
const quick = async (low, high) => {
if (low < high) {
var pivot = color[high];
var i = low - 1;
for (var j = low; j <= high - 1; j++) {
await delay(500);
if (color[j] < pivot) {
i++;
swap(i, j);
// delay here
}
}
var pi = i + 1;
swap(pi, high);
await delay(500);
await quick(low, pi - 1);
await quick(pi + 1, high);
}
// return is implicit
};