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

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

如何避免在Node.js中長時間嵌套異步函數

如何避免在Node.js中長時間嵌套異步函數

楊魅力 2019-08-26 09:39:58
如何避免在Node.js中長時間嵌套異步函數我想創建一個顯示來自數據庫的一些數據的頁面,所以我創建了一些從我的數據庫中獲取數據的函數。我只是Node.js中的新手,所以據我所知,如果我想在一個頁面中使用所有這些(HTTP響應),我必須將它們全部嵌套:http.createServer(function (req, res) {   res.writeHead(200, {'Content-Type': 'text/html'});   var html = "<h1>Demo page</h1>";   getSomeDate(client, function(someData) {     html += "<p>"+ someData +"</p>";     getSomeOtherDate(client, function(someOtherData) {       html += "<p>"+ someOtherData +"</p>";       getMoreData(client, function(moreData) {         html += "<p>"+ moreData +"</p>";         res.write(html);         res.end();       });     });   });如果有很多這樣的函數,那么嵌套就成了問題。有辦法避免這種情況嗎?我想這與你如何組合多個異步函數有關,這似乎是一個基本的東西。
查看完整描述

3 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

有趣的觀察。請注意,在JavaScript中,您通??梢允褂妹瘮底兞刻鎿Q內聯匿名回調函數。

下列:

http.createServer(function (req, res) {
   // inline callback function ...

   getSomeData(client, function (someData) {
      // another inline callback function ...

      getMoreData(client, function(moreData) {
         // one more inline callback function ...
      });
   });

   // etc ...});

可以重寫看起來像這樣:

var moreDataParser = function (moreData) {
   // date parsing logic};var someDataParser = function (someData) {
   // some data parsing logic

   getMoreData(client, moreDataParser);};var createServerCallback = function (req, res) {
   // create server logic

   getSomeData(client, someDataParser);

   // etc ...};http.createServer(createServerCallback);

但是,除非您計劃在其他位置重用回調邏輯,否則通常更容易讀取內聯匿名函數,如您的示例所示。它還可以讓您不必為所有回調找到一個名稱。

另外請注意,正如@pst在下面的注釋中所指出的,如果您正在訪問內部函數中的閉包變量,則上述內容不是簡單的翻譯。在這種情況下,使用內聯匿名函數更為可取。


查看完整回答
反對 回復 2019-08-26
  • 3 回答
  • 0 關注
  • 723 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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