问题如下(别人来问的, 大体细节如下)
这是他的代码
getdb().then(function (dbList) {
for (var k of dbList) {
console.log('1');
(function (i) {
getList(i).then(function (result) {
console.log('2')
})
})(k)
}
})
这个是个请求, 循环第一个请求的结果作为第二个请求的条件, 如果这么写

会出现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)
}
然后想到这我决定用计时器实现异步的方式去模拟他的请求
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的异步与计时器不同还是我的思路有问题, 当前是改用递归去解决的循环请求问题, 不知道大家对这个有什么看法或者见解, 感谢各位的不吝赐教