【发布时间】:2014-04-03 10:08:17
【问题描述】:
我正在尝试运行一个多次执行相同操作的脚本,但我不想在回调之后陷入编写回调的困境。我是 node.js 的初学者,所以我不确定这样做的正确方法。下面是我的代码:
exports.index = function (req,res) {
/* some code */
something.execute(this, that, function(results) {
for (var i = 2; i <= 10; i++) {
var nextPage = getNextPage(i);
}
}
}
function getNextPage(page) {
something.execute(this, that, function(results) {
return results;
}
}
结果是返回未定义。我知道这与 getNextPage 在其余代码之后完成有关,因为节点是异步的,但我不确定解决这个问题的最佳方法是什么。
有什么建议吗?谢谢!
编辑:在 getNextPage 中添加了代码。我几乎正在为另外 9 个页面运行相同的代码。似乎我需要弄清楚如何强制 something.execute 循环运行。
【问题讨论】:
-
另外,在您展示如何分配
result之前,我们无法说出问题所在。 -
你需要展示更多代码或解释更多你想要做什么。如果您建议 getNextPage() return undefined 那么您需要显示 getNextPage() 的代码
-
听起来你知道你可以通过添加另一个回调来解决这个问题,但是你不愿意去那里。对抗“太多嵌套回调”的常见模式是使用多个“Promises”库中的任何一个。 github.com/kriskowal/q 就是其中之一。你可能想检查一下。 Promise 为您的异步调用添加了一些样板,但将它们与您的回调分离。
-
我同意 Jason 的 promises 库建议作为避免嵌套回调忧郁的一般方法,我认为您会发现否则这是不可避免的(节点野兽的性质)。如果它可能有帮助,我昨天提供了一个answer 一个带有大量评论的 Q 承诺示例以及等效的非承诺版本。更一般地说,其他评论者是正确的,我们需要更多代码来提供任何真正的帮助。
-
+1 用于使用 Promise 进行流量控制。尽管对于分页信息,使用流将是我的首选方法。 npmjs.org/package/event-stream
标签: javascript node.js asynchronous callback