javascript - 如何等待readFile()返回结果之后再执行?
本文介绍了javascript - 如何等待readFile()返回结果之后再执行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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初学,还请各位指点
解决方案
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);
});
});
}
这篇关于javascript - 如何等待readFile()返回结果之后再执行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文