2017-07-17 40 views
-2

我是NodeJS的新手,有些東西我不明白。在Node和Javascript中異步

節點的基本功能是異步的,但JS本身(通過setTimeout)。那麼爲什麼像Promise之類的功能在節點之前不存在?

@EDIT:有了Christoph的迴應,我明白今天的JS和Node是相似的,所以都是異步非阻塞I/O?

謝謝大家。

+0

setTimeout'如何工作[在瀏覽器中](https://stackoverflow.com/a/29391634/2476755)與[in node](https://stackoverflow.com/a/10767807/2476755) – royhowie

+0

Try觀看這段簡短的視頻:https://www.youtube.com/watch?v=8aGhZQkoFbQ這可能會解釋一些關於nodejs意味着什麼的更多細節。 –

+0

請編輯該問題,將其限制爲具有足夠詳細信息的特定問題以確定適當的答案。避免一次詢問多個不同的問題。 – Quentin

回答

2

這個Promise API剛剛被添加到javascript核心與節點無關。這只是語言發展本身的一部分。

Javascript最初是作爲一種簡單的腳本語言來操縱瀏覽器DOM。它在2周內由Brendan Eich在95年開發。這意味着,你今天的大多數功能都不存在。例如。 XMLHTTPRequest,每個現代網站的核心直到2000年才引入。當時很多人仍然認爲JavaScript是一個很好的噱頭來創建一些華麗的文本效果,但不是一個認真的工具來做(網絡)開發。

在瀏覽器戰爭塵埃落定之後,javascript在flash和java上取得了勝利之後,供應商一致認爲他們應該一起工作,並且需要所有瀏覽器都遵守嚴格的Web標準並遵守所有Web技術的標準化(HTML,CSS,EcmaScript)獲得了巨大的提升。與此同時,JavaScript獲得了許多新功能。

隨着javascript的成功人們開始思考「爲什麼只使用JavaScript進行客戶端腳本?」 - 所以在2009年,Ryan Dahl創建了Node.js,這是一個用於執行JavaScript代碼服務器端的JavaScript運行環境。

這意味着,在他們的核心「瀏覽器JavaScript」和「nodejs」實際上都基於ECMAScript並運行在單線程異步執行的相同原理上。兩者都可以選擇產卵worker threads。基本功能如setTimeout在瀏覽器和節點中幾乎相同。

但是,瀏覽器具有自定義對象來處理呈現網頁並與用戶交互,並且非常嚴格地被沙盒化,而節點具有服務器端語言所必需的所有API(例如,廣泛的文件訪問)如果它們存在於瀏覽器中,則本質上會構成安全風險。

+0

我明白,但是在Node之前存在來自JS的異步行爲嗎?它的啓發?爲什麼像Bluebird這樣的圖書館是用NodeJ編寫的?感謝您的答覆。 –

+0

@ Quoc-HaoTran NodeJS是javascript,所以它的範例都與瀏覽器的javascript相同。 Bluebird不是用NodeJS編寫的,它是用javascript編寫的nodejs庫。我編輯了我的答案,我希望現在更清楚? – Christoph

+0

非常感謝,現在更清楚了。我能再問你一個問題嗎?我們如何在JS中編寫異步函數? –