Javascript 处理完数组中的所有项后调用done()
例如: 此代码返回:Javascript 处理完数组中的所有项后调用done(),javascript,foreach,promise,settimeout,Javascript,Foreach,Promise,Settimeout,例如: 此代码返回: a b done 2 4 如何更改代码,使其仅在处理完数组中的所有项后才调用done()? i、 e: 使用Promises. 将每个流程包装在一个承诺中,该承诺在流程完成时得到解决。 然后将所有承诺包装在一个Promise.all中,这将创建一个新的Promise,一旦所有包装好的承诺都得到解决,该承诺就会得到解决。 然后调用done函数 var processes = [1,'a',2,'b'].map(function(item){ if (typeof ite
a
b
done
2
4
如何更改代码,使其仅在处理完数组中的所有项后才调用done()?
i、 e:
使用
Promise
s.将每个流程包装在一个
承诺中,该承诺在流程完成时得到解决。
然后将所有承诺包装在一个Promise.all
中,这将创建一个新的Promise
,一旦所有包装好的承诺都得到解决,该承诺就会得到解决。
然后调用done
函数
var processes = [1,'a',2,'b'].map(function(item){
if (typeof item === 'number') {
return new Promise(function(resolve) {
setTimeout(function(){
console.log(item * 2);
resolve();
},1000);
});
} else if (typeof item === 'string') {
console.log(item);
return Promise.resolve(); // A Promise that resolves immediately
}
});
Promise.all(processes).then(done);
使用承诺s.
将每个流程包装在一个承诺中,该承诺在流程完成时得到解决。
然后将所有承诺包装在一个Promise.all
中,这将创建一个新的Promise
,一旦所有包装好的承诺都得到解决,该承诺就会得到解决。
然后调用done
函数
var processes = [1,'a',2,'b'].map(function(item){
if (typeof item === 'number') {
return new Promise(function(resolve) {
setTimeout(function(){
console.log(item * 2);
resolve();
},1000);
});
} else if (typeof item === 'string') {
console.log(item);
return Promise.resolve(); // A Promise that resolves immediately
}
});
Promise.all(processes).then(done);
为什么要使用setTimeout?这很重要,还是你只需要数组中的字符串和数字?@MichałDąbrowski实际上我只是用setTimeout来模拟这个问题。实际上,我正在寻找一种方法来避免另一个fabricjs函数出现这个问题:object.clone(function(clone){…})为什么使用setTimeout?这很重要,还是你只需要数组中的字符串和数字?@MichałDąbrowski实际上我只是用setTimeout来模拟这个问题。实际上,我正在寻找另一个fabricjs函数来避免这个问题:object.clone(function(clone){…})
var processes = [1,'a',2,'b'].map(function(item){
if (typeof item === 'number') {
return new Promise(function(resolve) {
setTimeout(function(){
console.log(item * 2);
resolve();
},1000);
});
} else if (typeof item === 'string') {
console.log(item);
return Promise.resolve(); // A Promise that resolves immediately
}
});
Promise.all(processes).then(done);