promise的使用

该文章完全按照我的理解,如有错误欢迎指正

什么是promise: 

promise的状态分为:

等待  默认值

完成  .then

失败 .catch

promise是解决异步编程的最终方案,我们想象一个场景,当你有一个需求需要通过xhr发送接口获取到数据,然而数据是需要通过接口a返回的参数调用接口b,再通过接口b返回的数据调用接口c获取到最终数据,如果没有promise,那绝大部分解决方法就是通过回调函数来解决这个问题,但是如果函数层级过高,并不利于代码阅读,也就是所谓的回调地狱

promise通过链式调用的方法可以解决这个问题,并提供了一些api更加方便我们的开发编程(all,race,finally,allSettled等等),到了es7更是出现了async和await语法糖,使我们异步操作更加得心应手,不过需要注意的是因为太方便了,使用await并不能捕获到错误,可以通过try catch 或者自己封装一个捕获错误的函数例如:

export function to(promise, errorExt) {
  return promise
    .then(function(data) {
      return [null, data];
    })
    .catch(function(err) {
      if (errorExt) {
        Object.assign(err, errorExt);
      }
      return [err, undefined];
    });
}

promise不止于此还有更多的应用场景

例如:我有四五个接口需要都返回数据后,再执行下面的代码

例如:我有个表单页面,提交需要依赖一个接口的参数,这是需求

但是该接口返回很慢,我在刚进入表单页面时就已经调用该接口了,但是有可能点击提交时,接口还没有返回给我参数,就会产生错误,那该如何完美解决该问题,必须要刚进来就要加载。

我想到的方案有两个:

1:定义一个布尔,默认false,接口请求完成后改为true,来控制提交按钮的点击

2:使用promise,创建一个p = new Promise实例,状态默认为等待,当接口返回数据后,通过resolve函数,状态变成完成,在点击提交时,将提交的代码放到p.then中,等待完成就行,中间可以加个loading啥的

但是这个例子还是第一个比较合适,简单,第二个只是举例promise的应用场景

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值