将asynchronous/callback方法转换为阻塞/同步方法

是可以转换基于asynchronous/callback的方法在节点阻塞/同步方法?

我很好奇,更多的是来自理论视angular,而不是“我有问题解决”POV。

我看到如何callback方法可以转换为 ,通过Q等,但调用Q.done()不会阻止执行。

要在“multithreading环境”中将asynchronous函数转换为同步,我们需要设置一个循环来检查结果,从而导致阻塞。

以下是JS中的示例代码:

  function somethingSync(args){ var ret; //the result-holding variable //doing something async here... somethingAsync(args,function(result){ ret = result; }); while(ret === undefined){} //wait for the result until it's available,cause the blocking return ret; } 

要么

synchronize.js也有帮助。

节点同步模块可以帮助您做到这一点。 但请小心,这不是node.js方式。

虽然我不会推荐它,但是使用某种忙碌的等待很容易。 例如:

 var flag = false; asyncFunction( function () { //This is a callback flag = true; }) while (!flag) {} 

while循环将持续循环,直到callback执行完毕,从而阻止执行。

正如你可以想象的那样,这会使你的代码非常混乱,所以如果你打算这么做的话(我不build议这样做),你应该做一些帮助函数来包装你的asynchronous函数。 类似于Underscore.js的函数function,如油门 。 您可以通过查看注释的源代码来查看它们的工作原理。