我有這個簡單的nodejs應用程序,它爲我的web應用程序生成虛擬日期。 它所做的就是:尋找在nodejs應用程序中管理異步流的主流方式
- 丟棄虛擬數據庫
- 填充庫存收集
- 填充發票收集
- 填充常量數據收集
當然,所有的動作是異步的,我想依次執行它們,一個接一個。對我而言,寫一些東西來管理這種流程更簡單,但是,我想要一個支持其他類型流的主流解決方案。例如,並行運行並在第一次失敗時停止運行。
供您參考,請找骨架下面,描繪我的解決方案:
/*global require, console, process*/
var mongo, db, inventory, createChain;
function generateInventory(count) {
// returns the generated inventory
}
function generateInvoices(count, inventory) {
// returns the generated invoices
}
function generateConst() {
// returns the generated const data
}
mongo = require('mongojs');
db = mongo.connect('dummy', ['invoices', 'const', 'inventory']);
createChain = function() {
"use strict";
var chain = [false], i = 0;
return {
add: function (action, errMsg, resultCallback) {
chain[chain.length - 1] = {action: action, errMsg: errMsg, resultCallback: resultCallback};
chain.push(false);
return this;
},
invoke: function (exit) {
var str, that = this;
if (chain[i]) {
chain[i].action(function (err, o) {
if (err || !o) {
str = chain[i].errMsg;
if (err && err.message) {
str = str + ": " + err.message;
}
console.log(str);
} else {
if (chain[i].resultCallback) {
chain[i].resultCallback(o);
}
i += 1;
that.invoke(exit);
}
});
} else {
console.log("done.");
if (exit) {
process.exit();
}
}
}
};
};
createChain()
.add(function (callback) {
"use strict";
console.log("Dropping the dummy database.");
db.dropDatabase(callback);
}, "Failed to drop the dummy database")
.add(function (callback) {
"use strict";
console.log("Populating the inventory.");
db.inventory.insert(generateInventory(100), callback);
}, "Failed to populate the inventory collection", function (res) {
"use strict";
inventory = res;
})
.add(function (callback) {
"use strict";
console.log("Populating the invoices.");
db.invoices.insert(generateInvoices(10, inventory), callback);
}, "Failed to populate the invoices collection")
.add(function (callback) {
"use strict";
console.log("Populating the const.");
db["const"].insert(generateConst(), callback);
}, "Failed to populate the const collection")
.invoke(true);
任何人都可以提出一個有關包的NodeJS,這也將是容易使用?
非常感謝。
小心顯示如何使用異步重寫我的代碼? – mark
我是第二個異步模塊,我非常喜歡它。如果你有興趣,我可以在這裏談一談:http://nodecasts.net/episodes/5-thinking-asynchronously –