【发布时间】:2013-08-09 05:04:23
【问题描述】:
我是一个进入系统的(相对)节点新手,社区里所有的热情都是“只写回调,一切都是异步的和事件驱动的,别担心!”让我对单个程序中的控制流感到有些困惑(或者用更节点的术语,在更大的程序中处理单个请求期间的控制流)
如果我在节点下运行以下程序
var foo = function(){
console.log("Called Foo");
};
var bar = function(){
console.log("Called Bar");
};
var doTheThing = function(arg1, callback){
callback();
};
doTheThing(true, function() {
foo();
});
bar();
foo 是否有任何机会在 bar 之后执行?当我在本地通过命令行运行程序时,它总是
Called Foo
Called Bar
但我看到很多善意的布道者发出的警告,类似于不要假设你的回调会在你认为它会被调用时被调用,我不清楚他们是否只是警告关于库实现细节,或者当你使用函数对象作为参数时,node.js 是否做了一些奇怪/特殊的事情。
【问题讨论】:
-
没有机会。你所拥有的一切都是同步的。当您使用异步回调(如
setTimeout竞争条件),或者当您使用的库使用异步事物(如 jQuery$.Deferred对象)时,问题就出现了。 编辑:我意识到你主要是在谈论节点,但我不明白为什么会有任何区别......我希望我没有错!但是,除非您特别地(您的代码不是)使用异步功能,否则不应该有顺序会有所不同的原因 -
@Ian 我很确定你是对的,但我做这件事的时间已经够长了,除非我已经测试了 h-l 并得到了,否则我从不假设任何关于新技术的事情来自同行的确认。
-
嘿,这就是我评论的原因,希望更多的人加入讨论:)
标签: javascript node.js callback