我一直在学习Node.js,而我的脑海中一直困扰着我的是基于Node.js的异步编程。也许我做错了事,但是尽管我做了所有的研究,但我仍无法确定我应该如何适应来自同步编程背景的技术。如果有人想从任何地方调用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。我研究了回调,但无法理解函数内部带有函数的各种答案中给出的示例。
您必须在函数内定义函数(即回调)。
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之类的语言不同,在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
因此,我们可以分别声明函数并传递它们,以分别调用它们。现在,我们开始使用的代码呢?
function1
不带参数的新函数function1
被调用,调用function2
时带一个参数,一个新的无名函数,它的obj
参数console.log
使用传递的值进行调用obj
function2
带有单个参数的新函数callbackFn
callbackFn
用一个参数调用传递的值,obj
我们从某个地方得到因此,声明顺序为1、4、2;并且执行顺序为2、5、3。
*好的,它们有点特别。它们的定义被提升,您可以执行它们所代表的代码,并且它们的声明创建作用域和闭包。但是这些都是另一个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句