javascript - 如何等待readFile()返回结果之后再执行?

查看:455
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆