美文网首页
Javascript — Promise

Javascript — Promise

作者: 张德瘦嬢嬢 | 来源:发表于2021-01-08 10:09 被阅读0次

场景

异步请求1里面(比如ajax)

// ajax原生请求1
var url = 'url1';
var request;
var XHR = new XMLHttpRequest();
XHR.open('GET', url, true);
XHR.send();
XHR.onreadystatechange = function() {
    if (XHR.readyState == 4 && XHR.status == 200) {
        request = XHR.response;
        console.log(request);
      //请求2
      {
        //请求3
        {
            //请求4
          {
          //...
          }
        }
      }
    }
}

还需要发起一个请求2

而这个请求的参数需要是第一个请求的结果。这个时候我们就必须等上一个请求完成之后,再发起第二个请求。

当出行第3个请求,4个,5个。。。仍然要依赖上一个请求的时候,代码出现了回调地狱

Promise

es6的一个构造函数,看看其结构。

image.png

解决回调地狱之外,还有一个非常重要的需求:为了代码更加具有可读性和可维护性,我们需要将数据请求与数据处理明确的区分开来

Promise对象有三种状态

  • pending
  • resolved(fulfilled)
  • rejected

这三种状态不受外界影响,而且状态只能从pending改变为resolved或者rejected,并且不可逆

new Promise(function (resolve, reject) {
    // 一段耗时的异步操作比如ajax
    if(true) {resolve('成功')} // 数据处理完成
    if(false) { reject('失败')};// 数据处理出错
  }
).then(
  (res) => {console.log(res)},  // 成功
  (err) => {console.log(err)} // 失败
)

在Promise对象的构造函数中,将一个函数作为第一个参数

实际例子

参考阅读

彻底掌握Promise

相关文章

网友评论

      本文标题:Javascript — Promise

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