這是他的代碼面試
getdb().then(function (dbList) {
for (var k of dbList) {
console.log('1');
(function (i) {
getList(i).then(function (result) {
console.log('2')
})
})(k)
}
})
複製代碼
這個是個請求, 循環第一個請求的結果做爲第二個請求的條件, 若是這麼寫ajax
會出現id一致爲最後一個閉包
for (var k of [1, 2, 3, 4, 5]) {
setTimeout(function () {
console.log(i)
}, 0)
}
複製代碼
for循環加異步的問題, 當時的解決方案是經過閉包解決, 經過閉包保存循環的值, 來完成輸出1,2,3,4,5 代碼以下異步
for (var k of [1, 2, 3, 4, 5]) {
(function (i) {
setTimeout(function () {
console.log(i)
}, 0)
})(k)
}
複製代碼
而後想到這我決定用計時器實現異步的方式去模擬他的請求spa
var arr = [1, 2, 3, 4, 5, 6]
setTimeout(function () {
for (var i of arr) {
(function (a) {
console.log(a)
setTimeout(function () {
console.log(a, '2')
}, 0)
})(i)
}
}, 0)
複製代碼
可是經過這樣我並無獲得他的結果, 此處開始出疑問了, 都是異步, 相同的解決方案, 一個能夠解決一個"不能夠"(我也不知道爲啥不能夠, 因此想來問問),是ajax的異步與計時器不一樣仍是個人思路有問題, 當前是改用遞歸去解決的循環請求問題, 不知道你們對這個有什麼見解或者看法, 感謝各位的不吝賜教code