Javascript 如何在退货新承诺内延迟执行
我正在使用javascript开发一个基于web的算法可视化工具,因此在执行过程中需要一些暂停。为了暂停执行,我使用了Javascript 如何在退货新承诺内延迟执行,javascript,promise,async-await,delay,Javascript,Promise,Async Await,Delay,我正在使用javascript开发一个基于web的算法可视化工具,因此在执行过程中需要一些暂停。为了暂停执行,我使用了constdelay=ms=>newpromise(res=>setTimeout(res,ms))和被调用函数等待延迟(500),这是我在堆栈溢出上发现的,它与非递归算法配合使用效果很好。为了使递归算法有序,我使用了返回新承诺((解析,拒绝)和.then()。但是现在我不能在返回新承诺的中使用wait,原因是什么,我走对了吗? 我的代码如下所示(快速排序) const quic
constdelay=ms=>newpromise(res=>setTimeout(res,ms))代码>和被调用函数<代码>等待延迟(500)代码>,这是我在堆栈溢出上发现的,它与非递归算法配合使用效果很好。为了使递归算法有序,我使用了返回新承诺((解析,拒绝)
和.then()
。但是现在我不能在返回新承诺的中使用wait,原因是什么,我走对了吗?
我的代码如下所示(快速排序)
const quick=async(低、高)=>
{
返回新承诺((解决、拒绝)=>
{
如果(低<高)
{
变量轴=颜色[高]
变量i=低-1
对于(var j=low;j您不需要返回新的承诺(…
,因为异步函数已经返回承诺。您不能使用wait
,因为承诺处理程序不是异步函数。请尝试以下操作:
const quick=async(低、高)=>{
如果(低<高){
var pivot=颜色[高];
var i=低-1;
对于(var j=low;j I removedreturn new Promise(…
现在延迟开始工作,但现在轴的左部分和右部分同时兴奋。第一个是否应该等待延迟(500);
不在if(){…}
子句?即只有在进行交换时才延迟。可能不会造成很大的差异,但这正是问题所要求的。当然,你可以将延迟放在任何你想放的地方。@D.Pardal它正在工作。.then()
有什么问题吗?你使用了然后(快速(pi+1,高))
而不是然后(=>{quick(pi+1,高);});
,因此立即调用了quick
。这看起来像,根本没有使用async
/wait
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();
});
}