• ES6 promise初体验


    promise是ES6新增的语法,可用于解决回调地狱的问题

    var fs = require('fs')
    
    var p1 = new Promise(function (resolve, reject) {
        fs.readFile('./data/a.txt', 'utf8', function (err, data) {
            if (err) {
                reject(err)  //失败,调用.then的第二个回调函数参数
            } else {
                resolve(data)//成功,调用.then的第一个回调函数参数
            }
        })
    })
    
    var p2 = new Promise(function (resolve, reject) {
        fs.readFile('./data/b.txt', 'utf8', function (err, data) {
            if (err) {
                reject(err)
            } else {
                resolve(data)
            }
        })
    })
    
    var p3 = new Promise(function (resolve, reject) {
        fs.readFile('./data/c.txt', 'utf8', function (err, data) {
            if (err) {
                reject(err)
            } else {
                resolve(data)
            }
        })
    })
    
    p1
        .then(function (data) {
            console.log(data)
            // 当 p1 读取成功的时候
            // 当前函数中 return 的结果就可以在后面的 then 中 function 接收到
            // 当你 return 123 后面就接收到 123
            //      return 'hello' 后面就接收到 'hello'
            //      没有 return 后面收到的就是 undefined
            // 上面那些 return 的数据没什么用
            // 真正有用的是:我们可以 return 一个 Promise 对象
            // 当 return 一个 Promise 对象的时候,后续的 then 中的 方法的第一个参数会作为 p2 的 resolve
            //
            return p2
        }, function (err) {
            console.log('读取文件失败了', err)
        })
        .then(function (data) {
            console.log(data)
            return p3
        })
        .then(function (data) {
            console.log(data)
            console.log('end')
        })

    上面的例子使用起来很臃肿,封装一下

    var fs = require('fs')
    
    function pReadFile(filePath) {
        return new Promise(function (resolve, reject) {
            fs.readFile(filePath, 'utf8', function (err, data) {
                if (err) {
                    reject(err)
                } else {
                    resolve(data)
                }
            })
        })
    }
    
    pReadFile('./data/a.txt')
        .then(function (data) {
            console.log(data)
            return pReadFile('./data/b.txt')
        })
        .then(function (data) {
            console.log(data)
            return pReadFile('./data/c.txt')
        })
        .then(function (data) {
            console.log(data)
        })
  • 相关阅读:
    Python正课132 —— Vue 进阶5
    Python正课131 —— Vue 进阶4
    Python正课130 —— Vue 进阶3
    logging模块
    作业20
    suprocess模块
    configparser模块
    hashlib模块
    shutil模块
    序列化模块
  • 原文地址:https://www.cnblogs.com/chuanzi/p/10515928.html
Copyright © 2020-2023  润新知