亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 950 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號