Ala*_*orm 1 javascript callback node.js
我是一个(相对)节点新手进入系统,社区中所有的热情"只是写回调,一切都是异步和事件驱动的,不用担心!" 让我对单个程序中的控制流程感到有些困惑(或者更多的节点术语,在更大的程序中处理单个请求期间的控制流程)
如果我在节点下运行以下程序
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();
Run Code Online (Sandbox Code Playgroud)
有没有机会在之后foo执行?当我在本地通过命令行运行程序时,它始终是 bar
Called Foo
Called Bar
Run Code Online (Sandbox Code Playgroud)
但是我看到很多来自好心的福音传道者的警告,不要以为你认为你的回调会被调用,我不清楚他们是不是只是警告我关于库实现的细节,或者是节点.当您使用函数对象作为参数时,js会做一些奇怪/特殊的事情.
小智 5
不,没有机会.不是那个代码.
如果您正在编写自己的函数,或者您可以访问代码,则无需假设,您知道所有内容是同步还是其他,但如果您无法访问代码,或者没有读它,然后不,你不能假设回调将是同步的.
然而,出于两个原因做出这样的假设是不好的做法,首先是因为它现在同步并不意味着其他人,或者健忘的未来你以后不能改变它,其次,因为如果它是全部同步的,为什么是你/他们首先使用回调?回调的整个要点是允许异步调用的可能性.使用回调,然后表现得像是他们总是同步,即使你知道这种情况,也会让你的代码混淆任何其他人进来.