美文网首页
Promise在循环体中需要注意的一些事项

Promise在循环体中需要注意的一些事项

作者: 黑火巨雷 | 来源:发表于2018-03-27 21:00 被阅读111次

我们首先知道,promise的then返回的始终是一个新promise。那么就存在下述情况

let aPromise = new Promise((resolve,reject)=>{
    resolve('aPromise')
})

aPromise.then(res=>'bPromise')
aPromise.then(res=>{console.log(res)}) // 实际上打印的是'aPromise'

then不是改变aPromise的内容,而是始终返回新promise。

如此,当我们要写一个循环体的时候。就需要一个游标来记录每次执行完的then。

let delayPrint = (i = 1000) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(i);
            resolve('ok:'+i)
        }, 1000)
    })
}

let forbody = Promise.resolve('begin');
for (let i = 1; i <= 5; i++) {
    forbody = forbody.then(res=>{
        return delayPrint(i);
    })
}

我们的forbody每次重新记录forbody.then返回的新promise。这样下次执行forbody.then的时候总能记录正确的位置。利用这一特性,我们可以制造循环体。上述代码可以依次打印1,2,3,4,5。需要注意的是如果把console.log(i)放入then中,变成console.log(res)会存在一个业务位置的问题。区别在于打印完5后立即结束,还是会再执行下一个而不打印。原因时i=5时执行完成后还会return一个delayPrint,相当于多执行了一次。虽然没有下次的then。

也有一些比较丑陋的解决方案。如

let forbody = Promise.resolve('begin');
for (let i = 1; i <= 5; i++) {
    forbody = forbody.then(res=>{
        i!=5 && return delayPrint(i*1000);
    })
}

改良方案,用其他方式实现循环体

面对定长的的循环体。可以用遍历数组 + Promise.all的方式来实现。
使用这种方式很直观,并且在执行完成后能一次性得到所有的resolve

相关文章

  • Promise在循环体中需要注意的一些事项

    我们首先知道,promise的then返回的始终是一个新promise。那么就存在下述情况 then不是改变aPr...

  • 定期清理

    在自我管理的注意事项中,这是第三个需要注意的事项。需要定期的设定目标,与清理。尤其是对于一些不太明晰的地方,好比有...

  • for循环

    注意:在for循环里,如果for后面的变量在循环体中不需要,这个变量命名的时候可以用'_' print()函数: ...

  • GIT实操手册 —— 告诉你不告诉别人的注意事项

    目录 一、本地修改 二、代码提交 三、代码合并 三、定期维护 没啥,只是一些开发中需要注意注意注意的注意事项。 一...

  • 买房签订认购书,这些事项要注意!

    买房签订认购书时,有很多事项需要注意。在签约前,有一些事项是需要注意的。 今天小编给大家整理了一些,一起来看看吧,...

  • es6 async / await 使用经验总结

    async await使用的注意事项 async await注意 不能捕获Promise抛出的异常,所以我按下面的...

  • 前端开发必备技能——Async/Await 和 Promise

    本文开始先通过介绍 Promise 和 Async/Await 的介绍和详细用法,然后再根据实战中的注意事项,方便...

  • 使用jQuery的ajax方法实现form表单的提交

    注意事项:ajax方式中需要注意的是$.ajax方法中的参数:dataType和data。

  • 标书注意事项

    以下是我在标书制作过程中总结的一些有可能造成废标的一些注意事项。 一、标书打印前注意事项 1、首先根据招标文件...

  • 拔智齿后

    [20220418--048] 拔智齿注意事项与禁忌 拔智齿有一些注意事项与禁忌,需要由医生判断是否可以拔除智齿。...

网友评论

      本文标题:Promise在循环体中需要注意的一些事项

      本文链接:https://www.haomeiwen.com/subject/vpcnextx.html