• 关于学习js的Promise的心得体会


    最近一直在研究js的Promise对象,其中有一篇blog写得比较通俗易懂,转发如下:

    http://www.cnblogs.com/lvdabao/p/es6-promise-1.html

    参照上面描述的自己写了测试例子,明白了Promise的用法,然后自己写了个fs的Promise的例子,代码如下:

    var fs=require('fs');
    function readFile(){
        let readP=new Promise(function(success,fail){
            fs.readFile('./main.js',function(err,data){
                if(err){
                    fail(err);
                }
                success(data.toString());
            });
            
        });
        return readP;
    }
    
    function readFile2(){
        let readP=new Promise(function(success,fail){
            fs.readFile('./Person.js',function(err,data){
                if(err){
                    fail(err);
                }
                success(data.toString());
            });
            
        });
        return readP;
    }
    
    function readFile3(fileName){
        let readP=new Promise(function(success,fail){
            fs.readFile('./'+fileName,function(err,data){
                if(err){
                    fail(err);
                }
                success(data.toString());
            });
            
        });
        return readP;
    }
    
    var content='';
    
    /*readFile().then(function(data){
        //console.log(data.toString());
        content=data.toString();
        return readFile2();
    }).then(function(data){
        content+='
    -------------Person.js------------
    ';
        content+=data.toString();
        console.log(content);
    });*/
    
    readFile3('main.js').then(function(data){
        content=data.toString();
        return readFile3('Person.js'); 
    }).then(function(data){
        content+='
    -------------Person.js------------
    ';
        content+=data.toString();
        console.log(content);
    });

    这个是刚学Promise的第一个自己写的代码,继续深入,挖掘Promise的特性,又参考了这篇问答blog,地址如下:

    ”关于mongoose结合promise的问题”

    https://cnodejs.org/topic/55efda46dceb7e671ee08bcb

    参考了人家的代码,又写了个2.0的代码,改造代码如下:主要是采用了co库和yield特性

    var fs=require('fs');
    var co=require('co');
    
    
    
    function readFile3(fileName){
        let readP=new Promise(function(success,fail){
            fs.readFile('./'+fileName,function(err,data){
                if(err){
                    fail(err);
                }
                success(data.toString());
            });
            
        });
        return readP;
    }
    
    var content='';
    
    co(function *() {
      let file1 = yield readFile3('main.js');
      let file2 = yield readFile3('Person.js');
      
    
      // 这里处理file1, file2, file3
      console.log(file1);
      console.log('
     ok-------------Person.js------------ ok 
    ');
      console.log(file2);
      
    
    });

    后来,根据模块化,改造了上面的代码,主要是把读取文件的业务逻辑抽离出来:

    fsmodule.js的代码

    var fs=require('fs');
    
    
    
    function readFile3(fileName){
        let readP=new Promise(function(success,fail){
            fs.readFile('./'+fileName,function(err,data){
                if(err){
                    fail(err);
                }
                success(data.toString());
            });
            
        });
        return readP;
    }
    
    
    module.exports=readFile3;

    fspromise3.js的代码:

    var fs=require('fs');
    var co=require('co');
    var fsmodule=require('./fsmodule');
    
    co(function *() {
      let file1 = yield fsmodule('main.js');
      let file2 = yield fsmodule('Person.js');
      
    
      // 这里处理file1, file2, file3
      console.log(file1);
      console.log('
     ok-------------Person.js------------ ok 
    ');
      console.log(file2);
      
    
    });

    总结如下:对Promise有了认识,然后学习了yield和co库,分模块化开发。

    每天进步一点点,加油。

  • 相关阅读:
    递增一个指针
    ubuntu 系统 sudo apt-get update遇到问题sub-process returned an error code
    熟悉HDFS过程中遇到的问题
    大二暑假第八周进度报告
    大二暑假第七周进度报告
    oracle“ORA-00904”错误:标识符无效
    大学暑假第六周进度报告
    大二暑假第五周进度报告
    使用Navicat for Oracle新建表空间、用户及权限赋予
    大学暑假第四周进度报告
  • 原文地址:https://www.cnblogs.com/qkabcd/p/7643421.html
Copyright © 2020-2023  润新知