[英]How to handle async functions in nodejs
我一直在學習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
參數 obj
的值調用console.log
function2
的新函數,該function2
接受單個參數callbackFn
callbackFn
傳遞的值,即我們從某處獲得的obj
因此,聲明順序為1、4、2; 並且執行順序為2、5、3。
*好的,他們有點特別。 它們的定義被提升 ,您可以執行它們所代表的代碼,並且它們的聲明創建作用域和閉包 。 但是這些都是另一個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.