首页 > 其他 > 详细

Promise个人笔记---【Promise的前世今生】

时间:2018-10-19 17:13:54      阅读:119      评论:0      收藏:0      [点我收藏+]

Promise第一版本

案例是使用Node.js内置的fs模块[就是文件系统模块,负责读写文件。]来模拟异步操作

const fs = require(‘fs‘);
function getFilePath(fpath) {
    let p = new Promise(function (resolve, reject) {
        fs.readFile(fpath, ‘utf-8‘, (err, dataStr) => {
            if (err) return reject(err)
            resolve(dataStr)
        })

    });
    return p

}

let p = getFilePath(‘./src/main.js‘);
p.then(
    function (data) {
        console.log(‘-----------------‘ +data + ‘---------------‘)
    },
    function (err) {
        console.log(err.message)

    })

Promise 第二版本

function getFilePath(fpath) {
    return new Promise(
        function (resolve, reject) {
            fs.readFile(fpath, ‘utf-8‘, (err, dataStr) => {
                if (err) return reject(err)
                resolve(dataStr)
            })
        }
    )

}

getFilePath(‘./src/main.js‘)
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
        },
        function (err) {
            console.log(err.message)
        }
    )

新的需求: 依次读取 1.txt --> 2.txt --> 3.txt

第一版

function getFilePath(fpath) {
    return new Promise(
        function (resolve, reject) {
            fs.readFile(fpath, ‘utf-8‘, (err, dataStr) => {
                if (err) return reject(err)
                resolve(dataStr)
            })
        }
    )

}

getFilePath(‘./1.txt‘)
    .then(function (data) {
        console.log(‘-----------------‘ + data + ‘---------------‘)

        getFilePath(‘./2.txt‘)
            .then(function (data) {
                console.log(‘-----------------‘ + data + ‘---------------‘)

                getFilePath(‘./3.txt‘)
                    .then(function (data) {
                        console.log(‘-----------------‘ + data + ‘---------------‘)

                    })

            })
    })

第二版

function getFilePath(fpath) {
    return new Promise(
        function (resolve, reject) {
            fs.readFile(fpath, ‘utf-8‘, (err, dataStr) => {
                if (err) return reject(err)
                resolve(dataStr)
            })
        }
    )

}

getFilePath(‘./1.txt‘)
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
            return getFilePath(‘./2.txt‘)
        })
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
            return getFilePath(‘./3.txt‘)
        })
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
        })

新需求 捕获过程中的错误 不影响后面的Promise正常执行

function getFilePath(fpath) {
    return new Promise(
        function (resolve, reject) {
            fs.readFile(fpath, ‘utf-8‘, (err, dataStr) => {
                if (err) return reject(err);
                resolve(dataStr)
            })
        }
    )

}

getFilePath(‘./没有这个文件.txt‘)
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
            return getFilePath(‘./2.txt‘)

        }, function (err) {
            console.log(err.message)
            return getFilePath(‘./2.txt‘)
        })
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
            return getFilePath(‘./3.txt‘)
        })
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
        })

新需求 后面的执行以来前面的结果,当前面失败立即终止,并捕获错误

function getFilePath(fpath) {
    return new Promise(
        function (resolve, reject) {
            fs.readFile(fpath, ‘utf-8‘, (err, dataStr) => {
                if (err) return reject(err);
                resolve(dataStr)
            })
        }
    )

}

getFilePath(‘./1.txt‘)
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
            return getFilePath(‘./2.txt‘)

        })
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
            return getFilePath(‘./22.txt‘)
        })
    .then(
        function (data) {
            console.log(‘-----------------‘ + data + ‘---------------‘)
            return getFilePath(‘./3.txt‘)
        })
    .catch(function (err) {
        console.log(‘【自己】捕获到的错误‘+ err.message)
    })

小结:

  • Vue中的vue-resource(官方已经不推荐使用)和axios都是基于Promise的,完全继承了Promise的特性,看过文档后分分钟可以上手
  • axios中的http请求实现不需要在自己写逻辑了 ,直接调用它的api就可以

Promise个人笔记---【Promise的前世今生】

原文:https://www.cnblogs.com/wenqiangit/p/9817493.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!