ES2015+学习笔记系列(五)—— Promise

Promise基本语法

Promise是ES6引入的异步编程的新解决方案。语法上Promise是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果。

  • Promise构造函数:Promise(excutor){}

  • Promise.prototype.then方法

  • Promise.prototype.catch方法

  1. Promise封装Ajax
 let p = new Promise((resolve, reject) => {
            //1.创建对象
            let xhr = new XMLHttpRequest();
            //2.初始化
            xhr.open("get", "https://api.apiopen.top/getJoke");
            //3.发送
            xhr.send();
            //4.绑定事件,处理相应结果
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if (xhr.status >= 200 && xhr.status < 300) {
                        resolve(xhr.response);
                    }
                }
            };
        });
        p.then(value => {
            console.log(value);
        }).catch(err => {
            console.log(err);
        });

Promise的then方法

  • then方法的返回结果也是Promise对象,对象状态由回调函数执行结果决定

    • 如果then方法回调函数中返回的结果是非Promise类型的属性,then返回的promise对象的状态为成功,返回值为对象的成功的值(即resolve函数传入的值)

    • 如果then方法回调函数中返回结果是Promise对象,then返回的promise对象的状态为返回的promise对象的状态,返回值为返回的promise对象then方法返回的值(或resolve函数参数的值)

    • 如果then方法回调函数中返回结果是抛出错误,then返回的promise对象的状态为rejected,返回值为抛出错误的值

  • then方法可以链式调用

p.then(success=>{},err=>{}).then()
  • 读取多个文件
var fs = require("fs");
const { resolve } = require("path");
var readPromise = new Promise((resolve, reject) => {
  fs.readFile("./data/readfile1.txt", function (err, data1) {
    // console.log(data1.toString());
    resolve(data1);
  });
});
readPromise
  .then((value) => {
    return new Promise((resolve, reject) => {
      fs.readFile("./data/readfile2.txt", function (err, data2) {
        resolve([value, data2]);
      });
    });
  })
  .then((value) => {
    fs.readFile("./data/readfile3.txt", function (err, data3) {
      value.push(data3);
      console.log(value.join("\r\n"));
    });
  });
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页