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

Posted qkabcd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于学习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+=\'\\n-------------Person.js------------\\n\';
    content+=data.toString();
    console.log(content);
});*/

readFile3(\'main.js\').then(function(data){
    content=data.toString();
    return readFile3(\'Person.js\'); 
}).then(function(data){
    content+=\'\\n-------------Person.js------------\\n\';
    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(\'\\n ok-------------Person.js------------ ok \\n\');
  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(\'\\n ok-------------Person.js------------ ok \\n\');
  console.log(file2);
  

});

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

 

每天进步一点点,加油。

以上是关于关于学习js的Promise的心得体会的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段12——JavaScript的Promise对象

promise的学习心得记录

关于js构造函数的学习以及个人心得

大话JS神器之Promise

关于js----------------分享前端开发常用代码片段

cocos creator自学心得------脚本学习第一天