jsforeach异步的问题_js中forEach回调同异步题目
js中forEach自身是同步的
舉個栗子:
[many, too many, so many].forEach((value) => {
some code; // 這是一個大數值運算(非異步代碼),須要幾毫秒的時候
});
other code; // 這些代碼將會壅塞,比及forEach輪回完以后實行
這是回調中沒有異步代碼的狀況。
再舉一個有異步的
[1, 2, 3].forEach((value) => {
setTimeout(function() {
some code;
}, 1000);
});
other code; // 這部份代碼不會被setTimeout壅塞,forEach遍歷完1,2,3以后就實行
[1, 2, 3].forEach( async (value) => {
let foo = await promiseFn();
});
other code; // 一樣不會遭到異步壅塞
上面是2種異步代碼情勢, 然則都不會壅塞背面的代碼。我明白的是:forEach的回調函數會被馬上實行,回調里有異步代碼,依據EventLoop機制放入挪用棧,繼承實行同步代碼以完畢; 回調自身就是異步函數,放入挪用棧,完畢本次遍歷。
連系代碼明白:
Array.prototype.forEach = function (callback) {
for(let index = 0; index < this.length; index++) {
callback(this[index], index, this);
}
}
關于通例for輪回
const sleep = (timer) => {
return new Promise((resolve, reject) => {
setTimeout(resolve, timer);
});
}
const foo = async () => {
for (let i = 0; i < 5; i++) {
await sleep(1000);
console.log(i);
}
}
foo(); // 從1到5,每隔一秒輸出一個數字
總結
以上是生活随笔為你收集整理的jsforeach异步的问题_js中forEach回调同异步题目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery链式写法 java_jQue
- 下一篇: java获取eureka_获取Eurek