用promise与async await解决回调地狱问题

  用Promise对象, 解决回调地狱:

      1. 先封装一个Promise请求函数

      2. 在第一个promise的.then里面, 将第二个异步任务得到的promise, 通过return返回出来;

      3. 在第一个.then()的后面, 就可以设置第二个promise的.then()函数了;

      4. 以此类推, 通过.then()的链式调用, 解决回调地狱问题. 且.then()一定会按顺序执行;

  // 1. 用promsie封装请求
      function ajax(path, params, method = "GET") {
        let urlStr = `https://restapi.amap.com/v3${path}?key=278252e0c1e253f6365ce9a4926f015d&`;
        if (params) urlStr += params;
        return new Promise(resolve => {
          fetch(urlStr, {
            method,
          })
            .then(resp => resp.json())
            .then(data => {
              resolve(data);
            });
        });
      }

      但是这种方式依然不够

  // 2. 利用封装好的ajax请求, 开始实现需求.
      // ------ 请求城市信息
      ajax("/ip")
        .then(({ city }) => {
          // ------ 根据城市, 请求天气信息
          return ajax("/weather/weatherInfo", `city=${city}&extensions=all`);
        })
        .then(data => {
          // ------- 根据天气数据, 查询出行建议
          return ajax("/ip");
        })
        .then(data => {});

简洁, 所以, 终极解决方案, 就是async+await方案.

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值