Promise

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

1.Promise构造函数:Promise(excutor){};

2.Promise.prototype.then方法;

3.Promise.prototype.catch方法;

1).实例化Promise对象

Promise 对象的三种状态:初始化,成功,失败

示例:

const p=new Promise(function(resolve, reject) {
            //封装在Promise对象里面
            setTimeout(function() {
                // let data='数据库中的用户数据';
                // resolve(data);
                let aro='数据读取失败';
                reject(aro);
            },1000)
        })
        //调用promise对象的then方法
        //如果读取成功,则调用第一个回调函数如果失败调用第二个回调函数
        p.then(function(value){
            // console.log(value)
        },function(reason){
            console.error(reason)
        })

2)Promise-then方法:

 //创建一个promise对象
        const p = new Promise((resolve, reject) => {
            setTimeout(() => {
                reject('用户数据');
            }, 1000)
        })
    //   const result= p.then(value=> {
    //         console.log(value);
    //     }, reason=> {
    //         console.warn(reason);
    //     })
    //     console.log(result);
        //链式调用
        p.then(value=>{
            console.log(value);
        },reason=>{
            console.warn(reason)
        }),(value=>{

        },reason=>{

        })

3)Promise的catch方法:

<script>
        const p=new Promise((resolve,reject)=>{
            reject('出错啦!');
        })
        // p.then(value=>{
        //     console.log(value);
        // },reason=>{
        //     console.error(reason);
        // });
        p.catch(reason=>{
            console.warn(reason);
        });

4)Promise解决回调地狱

const fs = require("fs");
// fs.readFile('./resources/jsy.md', (err, data1) => {
//     fs.readFile('./resources/ly.md', (err, data2) => {
//         fs.readFile ('./resources/qmy.md', (err, data3) => {
//             let result = data1 + '\n' + data2 + '\n' + data3;
//             console.log(result);
//         });
//     });
// });

//使用Promise实现
//then方法的链式调用,封装多个异步任务
const p = new Promise((resolve, reject) => {
    fs.readFile('./resources/jsy.md', (err, data) => {
        resolve(data);
    })
})
p.then(value => {
    return new Promise((resolve, reject) => {
        fs.readFile('./resources/ly.md', (err, data) => {
            resolve([value,data]);
        })
    })
}).then(value => {
    return new Promise((resolve, reject) => {
        fs.readFile('./resources/qmy.md', (err, data) => {
            value.push(data);
            resolve(value);
        })
    })
}).then(value => {
    console.log(value.join('\r\n'));//拼接,用空格和换行隔开
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值