[REST] callback function in node.js
不太確定放在此類別是否正確,
不過, 之前 node.js 的程式碼都歸於此類別,
也就先暫時這樣分類吧...
主要參考的內容如下:
http://larry850806.github.io/2016/06/16/nodejs-async/
https://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm
node.js 為平行化 (非同步) 架構,
因此, 當我們執行一個 function 時, 會先放入 event loop 中,
並在背景繼續執行其他程式流程, 如下圖所示:
此平行化架構, 不同於 c / java 按程式一行一行執行的架構,
node.js 可允許同時執行多項程式, 有利於利用多執行緒處理,
然而, 當一個程式需要另一個程式的結果時, 就需要 callback 來完成.
舉例來說:
此程式目的為讀一個檔案 (test.txt) 並顯示長度,
紅字部分為 callback 部分,
在這部分的程式將等到 readFile 執行完之後才會執行,
執行結果如下:
我們可以看到先出現: not finish,
來自於最後一行的程式: console.log('not finish');
而在之後才是讀檔結果.
callback function 也讓我們需要重新適應 coding 的方式,
例如, 在過去寫 c / java 的時候, 我們可以寫一個 function:
但在 node.js 中, 執行此 function 的結果永遠是 0,
(因為在非同步架構下, 不會等 readFile 結束才 return count 數值)
此時, 就需要把和 count 相關的指令包在 readFile 的 callback 中,
才可以取用文字檔的長度資訊.
當然, 還有一些其他更進階的解法, 請參考:
https://stackoverflow.com/questions/23339907/returning-a-value-from-callback-function-in-node-js
https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call
不過, 之前 node.js 的程式碼都歸於此類別,
也就先暫時這樣分類吧...
主要參考的內容如下:
http://larry850806.github.io/2016/06/16/nodejs-async/
https://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm
node.js 為平行化 (非同步) 架構,
因此, 當我們執行一個 function 時, 會先放入 event loop 中,
並在背景繼續執行其他程式流程, 如下圖所示:
此平行化架構, 不同於 c / java 按程式一行一行執行的架構,
node.js 可允許同時執行多項程式, 有利於利用多執行緒處理,
然而, 當一個程式需要另一個程式的結果時, 就需要 callback 來完成.
舉例來說:
var fs = require('fs');
// fs.readFile(filename, callback(err, content))
fs.readFile('test.txt', function(err, content){
var str = content.toString();
console.log(str.length);
console.log('finish');
});
console.log('not finish');
此程式目的為讀一個檔案 (test.txt) 並顯示長度,
紅字部分為 callback 部分,
在這部分的程式將等到 readFile 執行完之後才會執行,
執行結果如下:
$ node callback.js
not finish
245
finish
我們可以看到先出現: not finish,
來自於最後一行的程式: console.log('not finish');
而在之後才是讀檔結果.
callback function 也讓我們需要重新適應 coding 的方式,
例如, 在過去寫 c / java 的時候, 我們可以寫一個 function:
function readtest() {
count = 0;
fs.readFile('test.txt', function(err, content) {
var str = content.toString();
console.log(str.length);
count = str.length;
console.log('finish');
});
return count;
}
但在 node.js 中, 執行此 function 的結果永遠是 0,
(因為在非同步架構下, 不會等 readFile 結束才 return count 數值)
此時, 就需要把和 count 相關的指令包在 readFile 的 callback 中,
才可以取用文字檔的長度資訊.
當然, 還有一些其他更進階的解法, 請參考:
https://stackoverflow.com/questions/23339907/returning-a-value-from-callback-function-in-node-js
https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call
留言
張貼留言