为什么在使用 promise.all() 时值变为空值?

Why value is getting null on taking promise.all()?

当我使用 Promise.all() 值列表时,在快速排序功能下有时会采用空值,

同时在两个快速排序上独立地接受 promise

(在快速排序函数中)一切正常,

找不出错误。 由于错误的可视化发生,基本上,这是快速排序可视化的代码。这对单独的等待工作正常,但对等待 promise.all() 无效。 提前致谢...

var w=20;
var values=[];
var state=[];

async function swep(pindex,end){
    await sleep(500);
    let k=values[pindex];
    values[pindex]=values[end];
    values[end]=k;
}

async function quicksort(start,end) {
    if(start>=end){
        return;
    }
    let pivot= await partition(start,end);
    await Promise.all([quicksort(start,pivot-1)
    ,quicksort(pivot+1,end)]);
    // await quicksort(start,pivot-1);
    // await quicksort(pivot+1,end);
    return;
}
async function partition(start,end){
    pindex=start;
    state[end]=-1;
    pvalue=values[end];
    for(let i=start;i<end;i++){
        state[i]=1;
        if(values[i]<pvalue){
            await swep(pindex,i);
            pindex++;
        }
        
    }
    for(let i =start;i<=end;i++){
        state[i]=0;
    }
    await swep(pindex,end);
    return pindex;
}

function setup(){
    createCanvas(windowWidth, windowHeight);
    values=new Array(floor(width/w));
    n=values.length;
    state=new Array(n);
    for(var i=0;i<values.length;i++){
        values[i]=random(20,height);
        state[i]=0;
    }
    quicksort(0,n-1);
}
function draw(){
    background(255, 153, 194);
    for(let j =0;j<values.length;j++){
    noStroke();
    if(state[j]==0){
        fill(255, 255, 0);
    }
    else if(state[j]==-1){
        fill(255,0,0);
    }
    else{
        fill(0,255,0);
    }
    if(values[j]==null){
        console.log(j);
    }
    rect(w*j,height-values[j],w,values[j]);
    }
}
function sleep(ms) {
    return new Promise((resolve) => {setTimeout(resolve, ms);});
}

发生这种情况是因为您没有将某些变量定义为 local 变量,特别是 pindexpvalue。当你在一个使用和改变 pindex 的循环中有 await 时,你冒着另一个异步任务也是 运行 这段代码的风险,将在该变量中得到不希望的更改。