将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,如油门 。 您可以通过查看注释的源代码来查看它们的工作原理。