我在Node中编写了几个快速应用程序,而且我的知识存在可耻的差距。请放轻松我。
将这种传统格式用于Node.js中的函数是否合适?
function isGreaterThanZero ( val ){
return val > 0;
}
还是应该总是使用回调?
function isGreaterThanZero (val, cb){
if (val > 0) {cb(true);}
else {cb(false);}
}
Node.js的异步性质让我的大脑从内到外,我对所有事情都提出质疑。
答案 0 :(得分:4)
当然是合适的
这适用于同步代码
function isGreaterThanZero(val){
return val > 0;
}
在非专业术语中,当没有什么可以等待时,您将使用同步功能。您将在下面提到的例外情况之外使用同步功能
对于内存中的操作,例如基本计算,字符串操作,数组追加等,您可以使用同步函数。
但是,某些同步函数确实使用了回调,但它们更多地用于映射或过滤目的。在评论中,我看到你问过arr.filter
。其他功能(如arr.forEach
,arr.map
或arr.reduce
会采用回调,但它们不会隐式异步。在这种情况下,回调函数仅用于增强被调用函数的行为。
这适用于异步代码
function isGreaterThanZeroAsync(val, cb){
// some long process...
cb(val > 0);
}
当您需要等待时,您将使用异步功能。通常是网络,文件系统或数据库访问。异步功能允许您立即返回(退出)功能(如同步功能那样),但回叫将在它准备好后立即获取值。
这是一个小异步演示
function demoAsync(cb) {
console.log("demo start");
setTimeout(function() {
cb("hello world");
}, 1000);
}
console.log("init");
demoAsync(function(val) {
console.log(val);
console.log("demo done");
});
console.log("init done");
<强>输出强>
init
demo start
init done
// 1000 ms later...
hello world
demo done
为什么这很重要?
您获得"init"
,"demo start
&#34;和"init done
&#34;立即。这表明您的程序可以继续,同时我们正在等待演示完成。
在1000 ms
之后,我们会看到"hello world"
和"demo done"
。
万岁!一切都按顺序发生。