为了账号安全,请及时绑定邮箱和手机立即绑定

Node.JS 如何获取异步处理的结果并 return到最外层?

Node.JS 如何获取异步处理的结果并 return到最外层?

慕慕森 2019-03-21 22:15:30
如题,我想读取一个json文件,把内容转成string后再用JSON.paras把它转化成一个JSON的对象。我现在很迷惑……麻烦大家指导一下。//func.js//假设我先把readFile给Promise化const readFile = require('util').promisify(require('fs').readFile);//然后我想把读取文件转化成JSON的过程封装在一个函数里function read2JSON(filename){    let result;    readFile(filename).then((data)=>{        return JSON.parse(data.toString());    }).catch((err)=>{        console.log("******ERROR******:" + err);        return;    });}//最后把这个函数暴露出来exports.read2JSON = read2JSON;//测试一下let result = require('./func').read2JSON('db/list.json');console.log(result);结果显示的是undefined...那么究竟该如何把这个结果return到最外层使用呢?这到底是什么原理?
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

给你几种写法:


callback形式:

//func.js

const readFile = require('util').promisify(require('fs').readFile);


function read2JSON(filename, callback){

    let result;

    readFile(filename).then((data)=>{

        callback(null, JSON.parse(data.toString()));

    }).catch((err)=>{

        console.log("******ERROR******:" + err);

        callback(err, null);

    });

}


exports.read2JSON = read2JSON;

//测试一下

require('./func').read2JSON('db/list.json', (err, parseResult) {

    console.log(parseResult);

});

Promise写法:

//func.js

const readFile = require('util').promisify(require('fs').readFile);


function read2JSON(filename, callback){


    return readFile(filename).then((data)=>{

      return JSON.parse(data.toString());

    })

}


exports.read2JSON = read2JSON;

require('./func').read2JSON('db/list.json').then(function(result){

    console.log(result);

});

async/await 写法:

//func.js

const readFile = require('util').promisify(require('fs').readFile);


exports.read2JSON = async (filename, callback) => {

    

    let data = await readFile(filename);

    let result = JSON.parse(data.toString());

    return result;

}

require('./func').read2JSON('db/list.json').then(result => {

    console.log(result);

});


查看完整回答
反对 回复 2019-04-08
?
富国沪深

TA贡献1790条经验 获得超9个赞

使用async/await,异步执行结束后再返回


查看完整回答
反对 回复 2019-04-08
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

简单讲js是单线程,一定会一部分代码阻塞另一部分代码的运行,但是像网络请求或者读写文件,动作的开始和结束是在js,中间耗时的过程是在其他线程,异步就是让中间这部分不去阻塞其他js代码



查看完整回答
反对 回复 2019-04-08
  • 3 回答
  • 0 关注
  • 927 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信