zoukankan      html  css  js  c++  java
  • 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)
        })
  • 相关阅读:
    DataTable的一些使用技巧
    Linux下使用Mysql
    【Cocos2d-X开发学习笔记】第28期:游戏中音乐和音效的使用
    HDU 4669 Mutiples on a circle (DP , 统计)
    面试经典-设计包含min函数的栈
    最大熵模型
    这篇文章关于两阶段提交和Paxos讲的很好
    【读书笔记】神经网络与深度学习
    这个对协程的分析不错
    sendfile学习
  • 原文地址:https://www.cnblogs.com/chuanzi/p/10515928.html
Copyright © 2011-2022 走看看