1 回答

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
第一個(gè)setTimeout任務(wù)是在兩次遍歷以后才執(zhí)行的,一次times.map(getTime),一次之后的forEach,從結(jié)果看setTimeout(fn,0)是過了48ms才執(zhí)行的,基本是兩次遍歷的耗時(shí)。之后,每一個(gè)setTimeout任務(wù)執(zhí)行時(shí)都會(huì)觸發(fā)promise.then再執(zhí)行一段js,就是那段push數(shù)組和判斷打印的邏輯,promise.then的異步優(yōu)先級(jí)是要比setTimeout高的,下一個(gè)setTimeout要等上一個(gè)setTimeout的promise.then執(zhí)行完才會(huì)觸發(fā)執(zhí)行的。從結(jié)果看,后面每個(gè)setTimeout執(zhí)行的間隔都在10ms左右,基本是執(zhí)行promise.then的耗時(shí)。
后面兩個(gè)例子console.log(time)打印的都是傳入的參數(shù),是自己和自己比。
Promise.all(times.map(getTime)).then(function(time) {console.log(time)})返回結(jié)果應(yīng)該是個(gè)數(shù)組,和times完全一致。
添加回答
舉報(bào)