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

鍍金池/ 問答/HTML/ node.js中json獲取到的變量如何轉(zhuǎn)化為全局變量?

node.js中json獲取到的變量如何轉(zhuǎn)化為全局變量?

類似這樣:

var aaa = 0;
http.get('http://abc.com/api"', function (res) {

var json = '';
res.on('data', function (d) {
    json += d;
});
res.on('end',function(){
    //獲取到的數(shù)據(jù)
    json = JSON.parse(json);
    aaa = json;
});

}).on('error', function (e) {

console.error(e);

});
console.log(aaa);

因?yàn)楫惒椒祷財(cái)?shù)據(jù)的問題,實(shí)際上aaa沒有得到j(luò)son的數(shù)據(jù),輸出還是0;如何讓aaa的輸出為json的值呢?

回答
編輯回答
朕略萌

你的問題應(yīng)該改為異步返回的數(shù)據(jù)怎么能類同步獲取呢...

就像 Promise,所有的數(shù)據(jù)操作都應(yīng)該在鏈中操作。同理,你的異步回調(diào)也應(yīng)該在回調(diào)函數(shù)中操作。

你可以看看 Node.js 實(shí)現(xiàn)異步 I/O 操作的流程:

  1. 將參數(shù)與回調(diào)傳入 Node 核心模塊
  2. Node 核心模塊將傳入的參數(shù)和回調(diào)函數(shù)封裝成一個(gè)請(qǐng)求對(duì)象
  3. 將請(qǐng)求對(duì)象推入到 I/O 線程池等待結(jié)果
  4. (注意,這就是為什么你同步無法獲取數(shù)據(jù)的原因)上層 JavaScript 代碼繼續(xù)執(zhí)行!
  5. I/O 操作完成后,將結(jié)果存儲(chǔ)到請(qǐng)求對(duì)象的 result 中去并通知上層代碼
  6. 每次時(shí)間循環(huán)的時(shí)候檢查是否有完成的 I/O 操作,有就將請(qǐng)求對(duì)象加入觀察者隊(duì)列,之后當(dāng)事件處理
  7. 處理 I/O 觀察者事件時(shí),取出之前封裝在請(qǐng)求對(duì)象中的回調(diào)對(duì)象,執(zhí)行回調(diào),將 result 當(dāng)做參數(shù),完成回調(diào)

建議,如果你不喜歡這種回調(diào)函數(shù)的寫法,可以使用 ES7 的 Async/Await 語法。

舉個(gè)?:

async function fn() {
    let aaa = 0;
    let json = '';
    try {
        const res = await http.get('http://abc.com/api"');
        ...
        aaa = res.result;
        console.log(aaa);        
    } catch(err) {
        console.log(`error: ${err}`);
    }
}

這樣是不是舒服多了呢 ~ 但是建議選擇最新 LTS 版本的 Node.js哦

2017年12月6日 17:59