移动以下行:
res.render("index.html", content);进入
hasNextPage回调:
functions.getRecentPost = function ( req, res, next ) { //......... es.search(query, function (err, data) { //......... hasNextPage(_page, content.posts.length, function (data) { content.hasNext = data; res.render("index.html", content); }); });};如果希望
getRecentPost返回某些内容,则还需要向其添加回调,以便可以使用它的返回值。例如,如果您希望这样做:
functions.getRecentPost = function ( req, res, next) { //...... return content;}doSomething(functions.getRecentPost(x,y,z));这将无法正常工作,因为内容的最终值将被异步检索。相反,您需要这样做:
functions.getRecentPost = function ( req, res, next, callback ) { //......... hasNextPage(_page, content.posts.length, function (data) { content.hasNext = data; res.render("index.html", content); callback(content); });};functions.getRecentPost(x,y,z,function(content){ doSomething(content);})您不能异步返回数据。您需要通过编写如下代码来更改代码(和思维):
asyncFunction(function(data){ foo = data;});doSomething(foo);到这个:
asyncFunction(function(data){ doSomething(data);});基本上,将所有要在异步函数之后运行的代码移入传递给它的回调函数中。
常规命令式代码如下所示:
function fN () { x = fA(); y = fB(x); z = fC(y); return fD(fE(z));}异步代码如下所示:
function fN (callback) { fA(function(x){ fB(x,function(y){ fC(y,function(z){ fE(z,function(zz){ fD(zz,function(zzz){ callback(zzz); }); }); }); }); });}请注意,您不返回,而是传递了一个回调。



