如何在Node.js中等待

Bra*_*d C 8 mongodb node.js coffeescript

这是一个关于我认为是节点js中的简单模式的问题.

这是我在coffeescript中的例子:

db_is_open = false

db.open ->
  db_is_open = true

wait = ->
wait() until db_is_open
Run Code Online (Sandbox Code Playgroud)

再次在javascript中:

var db_is_open = false;

db.open(function() {
  db_is_open = true;
});

function wait() {};
while (not db_is_open) { wait()};
Run Code Online (Sandbox Code Playgroud)

这根本不起作用,因为while循环永远不会放弃控制,我认为这是有意义的.但是,如何告诉wait函数尝试队列中的下一个回调?

Mat*_*all 2

你为什么要等待,而不是仅仅使用在传递给的函数内部运行的回调db.open?这是非常惯用的 Node 代码:

db.open(function() {
  // db is now open, let's run some more code
  execute_db_query();
});
Run Code Online (Sandbox Code Playgroud)

基本上,您应该简单地遵循文档中列出的模式。

  • 也许我错过了一些东西,但为什么不在 `db.open` 回调中启动 Web 框架呢?如果这不能解决问题,您可能只想直接向他询问以进行澄清。 (2认同)
  • 无论您的模块必须设置什么 IO 资源,您都可以向其传递回调,它可以告诉您何时准备就绪。您永远不想隐式开始访问模块中的 IO,用户不会喜欢这样。 (2认同)