Promise对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Promise对象相关的知识,希望对你有一定的参考价值。

Promise是一个对象,用来传递异步操作的消息,代表某个未来才会知道结果的事件[将异步的操作以同步的操作的流
程表达出来],
promise对象有以下特点,
1. 对象的状态不受外界的影响。Promise对象代表一个异步操作,有3中状态,pending,resolved,rejected,
   只有异步操作的结果可以决定当前是哪一种状态,任何其他的操作都无法改变这个状态
2. 一旦状态改变就不会再变,任何时候都是这个结果
3. promise无法取消,一旦新建就会立即执行,无法中途取消
4. 不设置回调函数,promise内部的错误不会反应到外部

promise基本用法

Promise构造函数接受一个函数作为参数,函数的两个参数分别是resolve和reject,他们是2个函数
resolve:状态从pending=>resolved
reject:状态从pending=>rejected
实例生成之后,可以用then方法分别指定resolved状态和rejected状态的回调函数
promise.then(function(res){},function(err){}),
// 异步加载图片的例子
  function loadImageAsync(url) {
        return new Promise((resolve, reject) => {
          var img = new Image();
          img.onload = function () {
            resolve(img);
          };
          img.onerror = function () {
            reject(new Error("qqq"));
          };
          img.src = url;
        });
      }
      loadImageAsync("./test.png").then((res) => {
        console.log(res, "res=============");
      });
// Promise 实现ajax
 let getJSON = function (url) {
        var promise = new Promise(function (resolve, reject) {
          var clint = new XMLHttpRequest();
          clint.open("GET", url);
          clint.onreadystatechange = handler;
          clint.responseType = "json";
          clint.setRequestHeader("Accept", "application/json");
          clint.send();
          function handler() {
            if (this.readyState != 4) {
              return;
            }
            if (this.status === 200) {
              resolve(this.response);
            } else {
              reject(new Error("2"));
            }
          }
        });
      };
如果调用resolve和reject函数的时候带有参数,name这些参数会被传递给回调函数,resolve除了可以传递值之外
还可以传递promise

Promise.prototype.then

promise实例具有then方法,也就是说then方法是定义在原型对象promise.prototype上的,作用是为Promise实例
添加状态改时的回调函数,then方法返回的是一个新的promise因此可以采用链式调用
采用链式调用的then可以指定一组按照次序调用的回调函数,前一个回调函数有可能返回的还是一个promise对象(有
异步操作)而后一个回调函数就会等待该promise对象的状态发生变化,再被调用

Promise.prototypr.catch

                                                                                                                                                        


以上是关于Promise对象的主要内容,如果未能解决你的问题,请参考以下文章

前端面试题之手写promise

前端片段整理

什么时候然后从Promise.all()的子句运行?

ES6 promise对象

JavaScript - Promise对象

Promise对象