/**       * 简单的异步操作       */      function callback() {        console.log(`我是一个回调函数`);      }      console.log(`异步之前`);      setTimeout(callback, 1000);      console.log(`异步之后`);      /**       * ajax就是典型的异步操作       */      // 发起ajax的过程      const XHR = new XMLHttpRequest();      console.log(XHR);      XHR.onreadystatechange = function() {        if (XHR.readyState === 4) {          if (XHR.status === 200) {            console.log(XHR.responseText);          } else {            console.log(XHR.status);          }        }      };      XHR.open('GET', `https://jsonplaceholder.typicode.com/users`, true);      XHR.send();      /**       * jQuery请求       */      $.ajax({        type: 'get',        url: `https://jsonplaceholder.typicode.com/users`,        dataType: 'json',        success: function(res) {          console.log(res);        },        error: function(err) {          console.log(err);        }      });      /**       * 用Promise简单的封装一个AJAX函数       */      function myAjax(method, url, params) {        return new Promise((resolve, reject) => {          const XHR = new XMLHttpRequest();          XHR.onreadystatechange = function() {            if (XHR.readyState === 4) {              if (XHR.status === 200) {                console.log(XHR.responseText);              } else {                console.log(XHR.status);              }            }          };          // get          if (method === 'get' || method === 'GET') {            if (typeof params === 'object') {              // params拆解成字符串              params = Object.keys(params)                .map(function(key) {                  return (                    encodeURIComponent(key) +                    '=' +                    encodeURIComponent(params[key])                  );                })                .join('&');            }            url = params ? url + '?' + params : url;            XHR.open(method, url, true);            XHR.send();          }          //post          if (method === 'post' || method === 'POST') {            XHR.open(method, url, true);            XHR.setRequestHeader(              'Content-type',              'application/json; charset=utf-8'            );            XHR.send(JSON.stringify(params));          }        });      }      /**       * 使用定时器来模拟异步操作       *       */      let p = new Promise(function(resolve, reject) {        console.log(resolve); // 成功之后的回调        console.log(reject); // 失败时候的回调        setTimeout(() => {          resolve(100);        }, 1000);      });      p.then(function(data) {        console.log(data);      });