您似乎混淆了異步IO與異步函數。 node.js使用異步非阻塞IO,因爲非阻塞IO更好。瞭解它的最好方法是觀看ryan dahl的一些視頻。
如何爲Node編寫異步函數?
只需編寫普通函數,唯一的區別是它們不是立即執行,而是作爲回調傳遞。
我應該如何實現錯誤事件處理正確
一般的API給你一個ERR作爲第一個參數的回調。例如
database.query('something', function(err, result) {
if (err) handle(err);
doSomething(result);
});
是一種常見模式。
另一種常見模式是on('error')
。例如
process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
編輯:
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
以上功能時,稱爲
async_function(42, function(val) {
console.log(val)
});
console.log(43);
將打印42
到控制檯異步。特別是process.nextTick
在當前eventloop調用堆棧爲空之後觸發。在async_function
和console.log(43)
已運行後,該調用堆棧爲空。因此,我們打印43,然後是42.
您應該對事件循環進行一些閱讀。
這就是爲什麼我問。這對我來說並不明顯,這些功能有什麼不同。 – Kriem
我建議你在你最喜歡的瀏覽器中查看'setTimeout'和'setInterval',並和他們一起玩。或者ajax回調函數(可能是最接近節點體驗的函數),或事件監聽器來處理你熟悉的事情,比如點擊和加載事件。異步模型已經存在於瀏覽器中,並且它們在節點中完全相同。 – davin
@davin - 猜猜我沒有完全理解異步模型。 – Kriem