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

问题如下(别人来问的, 大体细节如下)

这是他的代码

getdb().then(function (dbList) {
    for (var k of dbList) {
        console.log('1');
        (function (i) {
            getList(i).then(function (result) {
                console.log('2')
            })
        })(k)
    }
})

这个是个请求, 循环第一个请求的结果作为第二个请求的条件, 如果这么写

image

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 29,112评论 1 45
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,813评论 1 32
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 16,509评论 4 61
  • 如何才能幸福: 做自己意识的主人,才有幸福可言 不要以社会的奖赏为目标,而要以自己能够控制的奖赏作为目标。 我们自...
    yclhub阅读 552评论 0 0
  • 春到驱冬寒, 飞雪躲去闲。 万物复苏醒, 天地换新颜。 作者:赵志中(一位只有小学文化的、喜欢诗词的、年近古稀的、...
    荣夏1阅读 462评论 6 13

友情链接更多精彩内容