可以将节点中基于异步/回调的方法转换为阻塞/同步方法吗?将异步/回调方法转换为阻塞/同步方法
我很好奇,更多来自理论POV,而不是“我有问题要解决”POV。
我怎么看回调方法可以通过Q转换为值等,但调用Q.done()
不会阻止执行。
可以将节点中基于异步/回调的方法转换为阻塞/同步方法吗?将异步/回调方法转换为阻塞/同步方法
我很好奇,更多来自理论POV,而不是“我有问题要解决”POV。
我怎么看回调方法可以通过Q转换为值等,但调用Q.done()
不会阻止执行。
node-sync模块可以帮助您做到这一点。但请小心,这不是node.js的方式。
虽然我不会推荐它,但使用某种忙碌的等待可以轻松完成。例如:
var flag = false;
asyncFunction(function() { //This is a callback
flag = true;
})
while (!flag) {}
while循环将持续循环,直到执行回调,从而阻止执行。你可以想象这会让你的代码非常混乱,所以如果你打算这么做(我不推荐),你应该使用某种帮助函数来包装你的异步函数;类似于Underscore.js的功能函数,如throttle。您可以通过查看annotated source来查看它们的工作原理。
要在“多线程环境”中将异步函数变为同步,我们需要设置一个循环来检查结果,从而导致阻塞。
下面是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;
}
OR
synchronize.js也有帮助。
很确定这是不可能的。 – Dogbert