关于一个循环请求与循环计时器的问题

问题以下(别人来问的, 大致细节以下)

这是他的代码面试

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

相关文章
相关标签/搜索