es6——promise对象

参考文献

1.是什么?

promise就是一种构造函数
作用(为什么要有它):解决一些异步编程问题 用来封装异步操作并可以获取异步操作成功或失败的结果

异步编程

异步编程 异步模式:每一个任务有一个或多个回调函数,前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务不等前一个任务结束就执行
(所以实现了程序执行顺序和代码的排列顺序是不一致的,也就是异步的)
比如现在要实现f1函数执行后执行f2 则可以把f2作为f1的回调函数

2.使用

实例化Promise对象
Promise()参数为一个函数 函数里面包装着异步操作 该函数的参数有两个:resolve和reject
在函数里面调用resolve 和 reject函数会改变该实例化对象的状态 前者会改变为成功 后者改变为失败

调用Promise对象的then方法
参数为两个函数 当实例成功状态时调用第一个函数 失败则调用第二个函数 两个函数都有一个参数
可以接受实例化对象函数中的形参

3.应用

3.1读取文件信息

 const p = new Promise(function(resolve,reject){
            fs.readFile('文件相对地址',(err,data)=>{
                if(err) return err;
                resolve(data);
            })
        })
        p.then(function(value){
            console.log('It works');
        },function(reason){
            console.log('error!');
        })

3.2promise封装AJAX

const p = new Promise(function(resolve,reject){
        const xhr = new XMLHttpRequest();
        //初始化
        xhr.open('get' , 'https://api.apiopen.top/searchPoetry?name=古风二首%20二');
        xhr.send();
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4){
                if(xhr.status>= 200 && xhr.status <300){
                    console.log(xhr.response);
                    resolve(xhr.response)
                }else{
                    reject(xhr.status);
                    console.log(xhr.status);
                }
            }
        }
        

        })
        p.then(function(value){
            console.log(value);
        },function(reason){
            console.log(reason);
        })

3.3promise.prototype.then();

then()方法返回结果是promise对象 对象状态由then方法参数函数里面的返回值决定
1.返回值为非promise类型
该promise对象状态为成功 value为该返回值

var p = new Promise(function(resolve,reject){
            setTimeout(() => {
                var ch = 'work';
                resolve(ch);
            }, 1000);
        })
        var result = p.then(function(value){
            console.log(value);
            return 123;
        },function(reason){
            console.warn(reason);
        })
        console.log(result);//

在这里插入图片描述

2.返回值是promise对象
该promise对象状态取决于该返回值的promise对象的状态
value为返回值promise对象resolve或者reject传的值

3.抛出错误
状态为失败
value为抛出的值

链式then方法

p.then(reason=>{}).then(resolve=>{},reject=>{});

3.3.1案例实现
案例需求:读入三个文件内容 并将其进行拼接

不太理想的解决方式:

//引入 fs 模板
const fs  = require("fs");
const { resolve } = require("path");

fs.readFile('文件路径1' ,(err,data1)=>{
    fs.readFile("文件路径2",(err,data2)=>{
        fs.readFile("文件路径3",(err,data3)=>{
            let result = data1+data2+data3;
            console.log(result);
        })
    })
})

使用链式then方法改进版:

const fs  = require("fs");
const { resolve } = require("path");
var p = new Promise(function(resolve,reject){
    fs.readFile('文件路径1',(err,data1)=>{
        resolve(data1);
    })
})
p.then(value=>{
    return new Promise(){
        fs.readFile("文件路径2",(err,data2)=>{
            resolve([value,data2]);
        })
    }
   
}).then(value=>{
    return new Promise(){
        fs.readFile("文件路径3",(err,data3)=>{
            value.push(data2);
            resolve(value);
        })
    }
    
}).then(value=>{
    console.log(value.join('\r\n'));
})

3.4 catch方法
相当于then方法不设置第一个参数

var p = new Promise(function(resolve,reject){
            setTimeout(() => {
                var ch = 'not work';
                reject(ch);
            }, 1000);
        })
        var result = var result = p.then(null,function(reason){
            console.warn(reason);
        })
//等价于:
p.catch(reason=>{
            console.warn(reason);
        })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值