我正在嘗試學習Node.js,它既用於web應用程序開發,也用於小型系統腳本。使用Python,我們有這個庫gevent實現了greenlets和monkey patch Python STD庫,所以你可以編寫同步代碼,它可以像async那樣工作。什麼是Python的gevent的Node.js等價物?
有沒有類似的東西,但對於節點?我已閱讀了異步和Fibers,但我不明白這是否是一種類似的方法。
我正在嘗試學習Node.js,它既用於web應用程序開發,也用於小型系統腳本。使用Python,我們有這個庫gevent實現了greenlets和monkey patch Python STD庫,所以你可以編寫同步代碼,它可以像async那樣工作。什麼是Python的gevent的Node.js等價物?
有沒有類似的東西,但對於節點?我已閱讀了異步和Fibers,但我不明白這是否是一種類似的方法。
從查看gevent文檔中的第一個示例,您正在尋找generators
,這是一項尖端功能。您可以通過在支持節點版本中傳遞--harmony_generators
來使用它們(當前不穩定的0.11)。
使用本地生成器並不難,但我建議co module。從它的自述一個例子:
co(function *(){
var a = get('http://google.com'); // an async process
var b = get('http://yahoo.com'); // an async process
var c = get('http://cloudup.com'); // an async process
var res = yield [a, b, c]; // wait until these are done in a
// synchronous style.
console.log(res); // log these objects
})()
其他更傳統的選擇將是使用許諾(多個庫存在):
doSomeTaskThatReturnsAPromise()
.then(somethingElse)
.then(somethingElse)
.then(function() { console.log("I'm done!") });
..或者庫如async:
async.series([
doSomeTask,
somethingElse,
somethingElse
], function() {
console.log("I'm done!");
});
我對Fibers沒有經驗,但我相信它在概念上與Generators相似。
nodejs在設計和默認情況下是異步的。因此無需修補任何內容,因爲所有庫都是使用async編程編寫的。沒有需要修補的同步庫。您必須編寫異步代碼。 – mpm
nodejs/javascript是由設計回調。問題是關於一種從回調設計到異步設計的技術,從python到twisted到gevent。 – Alex