關於一個循環請求與循環計時器的問題

問題以下(別人來問的, 大致細節以下)

這是他的代碼面試

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

相關文章
相關標籤/搜索