为什么在使用 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 变量,特别是 pindex
和 pvalue
。当你在一个使用和改变 pindex
的循环中有 await
时,你冒着另一个异步任务也是 运行 这段代码的风险,将在该变量中得到不希望的更改。
当我使用 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 变量,特别是 pindex
和 pvalue
。当你在一个使用和改变 pindex
的循环中有 await
时,你冒着另一个异步任务也是 运行 这段代码的风险,将在该变量中得到不希望的更改。