在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ Node.JS 如何獲取異步處理的結(jié)果并 return到最外層?

Node.JS 如何獲取異步處理的結(jié)果并 return到最外層?

如題,
我想讀取一個(gè)json文件,把內(nèi)容轉(zhuǎn)成string后再用JSON.paras把它轉(zhuǎn)化成一個(gè)JSON的對(duì)象。
我現(xiàn)在很迷惑……麻煩大家指導(dǎo)一下。

//func.js
//假設(shè)我先把readFile給Promise化
const readFile = require('util').promisify(require('fs').readFile);

//然后我想把讀取文件轉(zhuǎn)化成JSON的過(guò)程封裝在一個(gè)函數(shù)里
function read2JSON(filename){
    let result;
    readFile(filename).then((data)=>{
        return JSON.parse(data.toString());
    }).catch((err)=>{
        console.log("******ERROR******:" + err);
        return;
    });
}

//最后把這個(gè)函數(shù)暴露出來(lái)
exports.read2JSON = read2JSON;
//測(cè)試一下
let result = require('./func').read2JSON('db/list.json');
console.log(result);

結(jié)果顯示的是undefined...
那么究竟該如何把這個(gè)結(jié)果return到最外層使用呢?這到底是什么原理?

回答
編輯回答
夕顏

給你幾種寫法:

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;
//測(cè)試一下
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);
});
2018年9月14日 00:46
編輯回答
空痕

使用async/await,異步執(zhí)行結(jié)束后再返回

2017年9月17日 09:15