var fs =require('fs')
var co = require('co');
function readfile(path){
fs.readFile(path,'utf8',(err,data)=>{
if(err) console.log(err);
return data;
});
}
var gen =function* (){
var f1=yield readfile('/home/kevin/nodeSrc/testSrc/file/a.js');
var f2=yield readfile('/home/kevin/nodeSrc/testSrc/file/b.js');
console.log(f1.toString());
console.log(f2.toString());
};
co(gen).then(function(){
console.log('111');
});
上面的代码应读取的文件都在,但就是没有返回结果,所以有几个疑惑,请教各位
1.为何不报错?
2.lz单拿readfile()
方法实验执行得到的原因是因为readFile()
本身就是异步的,所以f1
的值是undefined
,但那也应该能继续往下执行啊,怎么没有一点打印信息?
3.如何更改才能读取显示打印信息呢?
lz初学,还请各位指点
我记得co只能执行generate function或者Promise吧,如果按你这么写的话,readfile应该是返回一个Promise实例才对。
fs.seadFileSync()
1、为何不报错。就算readFile有错,也是一个异步错误,你这边也是拿不到的。
2、你没有将生成器使用正确。
3、yield接受一个Promise对象,所以改法如下:
function readfile(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', (err, data) => {
if (err) {
console.log(err);
reject(err);
}
resolve(data);
});
});
}
把你的readfile
该写成返回Promise的函数。
在co中,yield后面只能是Thunk或者Promise。