美文网首页
使用promise解决异步递归的一次记录

使用promise解决异步递归的一次记录

作者: neoyoun | 来源:发表于2016-12-17 10:00 被阅读0次

这几天碰到一个问题,说起来也不难,只是自己promise理解的比较粗浅,导致一直停滞不前。

需要完成的功能是,抓取一个产品列表(静态页面)。我用request模块并自己封装了promise方法,在抓取的过程中发现我需要将所有的分页地址抓下来,再使用 promise.all 对返回的数组进行下一步操作。

由于JS基础太过薄弱,加上对异步,递归,promise,都没有很深入的理解。我在实现了递归请求并且将数据保存到数组中之后,不知道怎样将数据返回。我写的代码类似这样。

结果发现这样完全不行, getAllPage(url).then(data=> console.log(data)//undefined) ,拿不到值,但是在 resolve(pages)前面加入 console.log(pages) 最后能打印结果,只是打印的顺序不对,先是外面的函数 getAllPage 打印结果,再到内部的 currPage 打印结果。

所以到这时候我才明白,创建promise实例,里面的代码也是同步的,并不会像我期待的那样(代码还没执行到 resolve 的时候,会一直挂起等待(暴露JS学的差的事实)),所以返回做了点修改。

这样可以实现我要的功能了。每次查询有下一页的时候就跳到catch里面执行语句,就能把代码hold住了。

PS:得学一下markdown写简书了,代码贴成图片好丑

相关文章

  • 使用promise解决异步递归的一次记录

    这几天碰到一个问题,说起来也不难,只是自己promise理解的比较粗浅,导致一直停滞不前。 需要完成的功能是,抓取...

  • 异步中forEach/map与async/await使用踩坑

    在使用promise处理异步问题时,遇到坑 前端有些异步效果可以使用promise解决 forEach/map与a...

  • ES6(二)

    1. Promise Promise—解决异步操作(内部没变) 1.1 Promise的使用 以上是完整版,以...

  • 深度promise && 自实现一个Promise对象

    什么是promise? promise是js直接中进行异步编程的新的解决方案 promise的基本使用 Promi...

  • 回调地狱问题

    使用promise(es6中api)来解决回调地狱的问题。promise1、promise本身不是异步任务但是内部...

  • ES6 promise——初探

    本文思路 什么是异步 ES5异步实现方案 ES6 promise解决了什么问题 promise应该如何使用 1.异...

  • promise原理

    promise存在的原因 promise是异步问题的统一解决方案,在promise出来之前,解决异步只能用回调,回...

  • ES6--Promise

    Promise解决异步回调的问题 Promise.all和Promise.race

  • Promise介绍及jQuery deferred详解

    Promise介绍 Promise 是 JavaScript 的异步操作解决方案,是ES6提出的异步操作解决方案之...

  • ES6 同步和异步、Promise

    一.同步与异步 1. Promise作用:解决异步回调的问题 二.Promise对象 目的:创建异步对象,当异步对...

网友评论

      本文标题:使用promise解决异步递归的一次记录

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