2011-03-21 163 views
108

我在node.js中看到很多使用nextjavascript node.js next()

這是什麼,它從哪裏來?它有什麼作用?我可以使用它的客戶端?

對不起它的使用,例如這裏: http://dailyjs.com/2010/12/06/node-tutorial-5/

認準loadUser功能。

+0

我還沒有見過這個地方,它沒有在文檔中的任何地方引用。你確定它沒有在你正在查看的代碼庫中的某個地方定義嗎? – 2011-03-21 22:38:59

+0

這太模糊了。你能舉一個上下文的例子嗎? – Raynos 2011-03-21 22:39:03

回答

88

這似乎是Node.js控制流代碼中的一個變量命名約定,其中下一個要執行的函數的引用被賦予回調函數,以便在完成時啓動。

見,例如,代碼樣本這裏:

讓我們來看看您發佈的例子:

function loadUser(req, res, next) { 
    if (req.session.user_id) { 
    User.findById(req.session.user_id, function(user) { 
     if (user) { 
     req.currentUser = user; 
     return next(); 
     } else { 
     res.redirect('/sessions/new'); 
     } 
    }); 
    } else { 
    res.redirect('/sessions/new'); 
    } 
} 

app.get('/documents.:format?', loadUser, function(req, res) { 
    // ... 
}); 

loadUser函數需要在一個函數的第三個參數,它的名字必須是next。這是一個正常的功能參數。它持有對下一個要執行的操作的引用,並且一旦完成loadUser即被調用(除非找不到用戶)。

本例中沒有什麼特別的名字next;我們可以任命它。

+0

這在express.js中也用得相當多,但它不是'.next()'。他似乎會問'next'作爲一個對象的方法。 – Raynos 2011-03-21 22:44:36

+1

更好地使用'return next();' – 2016-11-16 21:40:51

+2

@RyanWalton我同意 – 2016-11-17 18:43:02

31

它是在需要串行執行動作的情況下傳遞迴調時使用的命名約定,例如,掃描目錄 - >讀取文件數據 - >用數據做一些事情。這優先於深度嵌套回調。在蒂姆·卡斯威爾的HowToNode博客下面的文章前三段給出了一個很好的概述:

http://howtonode.org/control-flow

也看到張貼的第二部分的順序操作部分:

http://howtonode.org/control-flow-part-ii

+1

非常感謝這個鏈接。它解釋了很多事情,當開始使用nodejs時 – 2016-04-10 17:32:51

+0

鏈接現在不工作。它給內部服務器錯誤 – Deep 2018-01-02 07:46:52

+0

從互聯網檔案更新的鏈接 – 2018-01-08 06:04:13