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)
        })
  • 相关阅读:
    GPIO推挽输出和开漏输出详解
    Linux驱动中completion接口浅析(wait_for_complete例子,很好)【转】
    当JAVA集合移除自身集合元素时发生的诸多问题
    Machine Learning #Lab1# Linear Regression
    Nth to Last Node in List
    Codeforces Round #272 (Div. 2)AK报告
    iOS 使用Block实现函数回调
    ios上禁止输入表情
    POJ 1287:Networking(最小生成树Kruskal)
    CSS实现强制换行-------Day 78
  • 原文地址:https://www.cnblogs.com/chuanzi/p/10515928.html
Copyright © 2011-2022 走看看