我一直在学习nodejs,并且继续让我头脑发昏的一件事是构建了nodejs的异步编程。也许我做错了什么,但尽管我进行了所有研究,但我无法理解我应该如何从同步编程背景中适应它。如果有人给我一个基于以下结构的简单异步示例,我真的很感激,因为你想从任何地方调用func2。
function1(){
var obj = function2();
console.log(obj); //"undefined".
}
function2(){
//do stuff with DB and get obj
console.log(obj); //logs obj.
return obj;
}
我偶然发现的问题是obj在func1中打印为未定义,而func2没有问题。当我将函数嵌套在彼此中时,它工作,让我相信由于nodejs的异步性质,它在func2完成之前继续登录func1。我的假设错了吗?
我在上面的例子中苦苦思索的是如何编写函数而不是将它们嵌套在一起,所以我可以一次从几个不同的函数调用func2。我已经查看了回调,但无法理解函数内部函数的各种答案中给出的示例。
答案 0 :(得分:0)
您必须在函数中定义函数(即回调函数)。
1 function function1(){
2 function2(function(obj) {
3 console.log(obj); //logs obj.
});
}
4 function function2(callbackFn){
//do stuff with DB and get obj
console.log(obj); //logs obj.
5 callbackFn(obj);
}
function2
可以同时从多个地方调用,而不只是function1
。
如果您可以更明确地了解您不理解的内容,那么您可能会得到更好的答案。
函数是值,就像数字,字符串和对象一样。
这是函数式编程的核心基础,也可能是你没有掌握的东西。在JavaScript中,与许多语言一样,函数并不特殊*。这与C或Java等语言不同,其中函数/方法与您在代码中处理的常用值不同。
2; // Here is a number
var a = 2; // I can assign it to a variable
console.log(2); // I can pass it as a function argument
function() {} // Here is a function
var a = function() {}; // I can assign it to a variable
console.log(function() {}); // I can pass it as a function argument
function jim() {} // This function's name is jim
var a = jim; // I can assign it to a variable
console.log(jim); // I can pass it as a function argument
(function() {})(); // I can call a function without giving it any names
jim(); // I can call a named function
a(); // I can call a function via a variable
jim.call(this, arg1); // Or I can get complicated
因此,我们可以声明函数并将它们分别传递给它们。现在,我们开始使用的代码如何。