• 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.catch
                                                                                                                                                           
    
  • 相关阅读:
    关于HTTP以及TCP
    .NetCore表单提交文件
    C# Out变量
    .NET Core 网络数据采集 -- 使用AngleSharp做html解析
    C# 根据Url下载文件/获取文件流
    C# 模拟表单提交
    C# 获取Url路径的参数信息
    C# 采集页面数据
    .net core 3.1 设置可跨域
    C# json字符串转化成Dictionary
  • 原文地址:https://www.cnblogs.com/rainbowqq/p/14847406.html
Copyright © 2020-2023  润新知