ES6 promise

本文详细介绍了Promise对象的概念、基本语法,以及如何封装文件读取和Ajax请求。通过实例演示了then方法的链式调用和catch方法的使用,帮助读者理解和实践Promise在处理异步任务中的优势。
摘要由CSDN通过智能技术生成

promise简书的一篇将promise的文章写的很详细

https://www.jianshu.com/p/1b63a13c2701

promise是一个对象,对象和函数的区别就是对象可以保存状态,函数不可以(闭包除外)
并未剥夺函数return的能力,因此无需层层传递callback,进行回调获取数据
代码风格,容易理解,便于维护
多个异步等待合并便于解决

作者:王云飞_小四_wyunfei
链接:https://www.jianshu.com/p/1b63a13c2701
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

基本语法

// 实例化 Promise 对象
        const p = new Promise(function(resolve, reject) {
            setTimeout(function() {
                // let data = '数据'
                // resolve(data);
                let err = '数据读取失败';
                reject(err);
            }, 1000)
        });
        //调用 promise 对象 then 方法
        p.then(function(value) {
            console.log(value);
        }, function(reason) {
            console.error(reason);
        })

promise 读取文件

// 引入 fs模块
const fs = require('fs');

// // 调用方法读取文件
// fs.readFile('./resources/为学.md', (err, data) => {
//     if (err) throw err;
//     console.log(data.toString());
// })

// 使用promise 封装
const p = new Promise(function(resolve, reject) {
    fs.readFile('./resources/为学.md', (err, data) => {
        //如果判断失败
        if (err) reject(err);
        //成功
        resolve(data)
    })
});
p.then(function(value) {
    console.log(value.toString());
}, function(reason) {
    console.log(reason);
})

封装ajax

// 引入 fs模块
const fs = require('fs');

// // 调用方法读取文件
// fs.readFile('./resources/为学.md', (err, data) => {
//     if (err) throw err;
//     console.log(data.toString());
// })

// 使用promise 封装
const p = new Promise(function(resolve, reject) {
    fs.readFile('./resources/为学.md', (err, data) => {
        //如果判断失败
        if (err) reject(err);
        //成功
        resolve(data)
    })
});
p.then(function(value) {
    console.log(value.toString());
}, function(reason) {
    console.log(reason);
})

then 方法

// 创建 promise 对象
        const p = new Promise(function(resolve, reject) {
            setTimeout(function() {
                resolve('用户数据');
                //reject(data)
            }, 1000)
        });
        //调用 promise 对象 then 方法 
        // then 方法的返回结果是 promise对象 对象状态由回调函数的执行结果决定
        // 如果回调函数中返回的结果是 非 promise 类型的属性 状态为成功 返回值为对象的成功的值
        const result = p.then(value => {
                console.log(value);
                // 非 promise 类型
                //return 123
                // 是 promise 对象
                // return new Promise((resolve, reject) => {
                //         //resolve('ok');
                //         reject('error')
                //     })
                // 抛出错误
                //throw new Error('error')
                //throw '出错啦'
            }, reason => {
                console.warn(reason);
            })
            //console.log(result);

        // 链式调用
        p.then(value => {

        }, reason => {

        }).then(value => {

        }, reason => {})

catch 方法

 const p = new Promise((resolve, reject) => {
            setTimeout(() => {
                //设置 p 对象的状态为失败, 并设置失败的值
                reject("出错啦!");
            }, 1000)
        });

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

        p.catch(function(reason) {
            console.warn(reason);
        });

实例

// 引入 fs模块
const fs = require('fs');
fs.readFile('./resources/为学.md', (err, data1) => {
    fs.readFile('./resources/插秧诗.md', (err, data2) => {
        fs.readFile('./resources/观书有感.md', (err, data3) => {
            let result = data1 + ` \n` + data2 + `\r\n` + data3;
            //console.log(result);
        });
    });
});

// 使用 promise 实现
const p = new Promise((resolve, reject) => {
    fs.readFile('./resources/为学.md', (err, data) => {
        resolve(data);
    });
});
p.then(value => {
    return new Promise((resolve, reject) => {
        fs.readFile('./resources/插秧诗.md', (err, data) => {
            resolve([value, data]);
        });
    })
}).then(value => {
    return new Promise((resolve, reject) => {
        fs.readFile('./resources/观书有感.md', (err, data) => {
            // 压入
            value.push(data);
            resolve(value);
        });
    })
}).then(value => {
    console.log(value.join('\n'));
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值