【发布时间】:2013-07-01 21:14:03
【问题描述】:
我正在尝试获取返回值,但总是未定义。
var hasNext;
es.search(nextQuery, function (err, data) {
if(data.hits.hits.length) {
return hasNext = true;
}
return hasNext = false;
});
我不确定如何获得返回值并在其他地方使用它?我需要使用这个返回值来验证其他函数,但它似乎在范围内。
这是我的代码:
functions.getRecentPost = function ( req, res, next ) {
.........
// This will get all the post
es.search(query, function (err, data) {
if(err) { // if error means no post and redirect them to create one
return res.redirect('/new/post');
}
....
content.hasPrevious = hasPreviousPage(_page, content.posts.length); // this function is okay
hasNextPage(_page, content.posts.length, function (data) {
content.hasNext = data;
});
res.render("index.html", content);
});
};
function hasNextPage (pageNum, totalPost, callback) {
es.search(query, function (err, data) {
if(data.hits.hits.length) {
return callback(true);
}
return callback(false);
});
};
【问题讨论】:
-
那是因为
es.search是一个异步函数,所以它之后的所有内容都会在它调用后立即执行,而不是在它返回时执行。任何依赖于es.search的结果的逻辑都应该在你的回调中设置hasNext。 -
@go-oleg 有没有我可以定义为全局值或至少可以将其返回给其他函数的东西?
-
如果这段代码 sn-p 属于一个函数,那么该函数本身也应该是异步的,并且应该将回调作为参数,在完成时调用该参数,类似于
es.search的工作方式。 -
ermm ...我认为我的方法太复杂了,无法将返回值返回到我现在真正想要的位置:(首先我有一个名为“getAllPost”的函数,这个函数只是一个同步函数,它将从 elasticsearch 中检索所有帖子,然后我有另一个名为“hasNext”的函数,它是异步函数,在其中我有 es.search 也是异步的。现在我可以得到返回到“getAllPost”??
-
你能把它们贴出来吗?
标签: javascript node.js scope undefined