节点使用全局variables

我是NodeJS的新手,但是经验丰富的程序员。 我正在做一个项目,让我的脚与节点湿润。 我在看MongoDB的存储。 要开始我只想testing在节点中创build一些基本的CRUDfunction。 我在下面列出了我的代码。

我的问题是关于全球变化“更新”。 它被用在“读”和“更新”函数中,以控制下一个被调用的函数。 我想按照以下顺序调用它们:创build,读取,更新,读取,删除。

这是我的理解是,我不能传递一个函数参数来“读”来指定下一个要调用的函数,因为这是asynchronous调用的,而我定义的lambda函数是我的callback函数mongojs.read将不会有父函数参数使用。

什么是正确的方法来做到这一点? 使用全球感觉就像一个黑客。 🙂

// app.js //<user>:<password>@<server>/<database> var connection = "foo:bar@127.0.0.1/blah"; var collections = ["scores"] var db = require("mongojs").connect(connection, collections); //console.log(db); var updated = false; function my_create() { console.log("my_create"); db.leaderboard.save({name: "sunder", score: 42}, function(err, result) { if(err || !result ) { console.log("Score save failed"); console.log(err); } else { console.log("Score save successful"); my_read(); } }); } function my_read() { console.log("my_read"); // app.js db.leaderboard.find({name: "sunder"}, function(err, results) { if(err || !results) { console.log("Score read failed"); console.log(err); } else { results.forEach(function(score) { console.log(score); }); // I am sure using globals is a HACK. Need to figure this out. if(updated) my_delete(); else my_update(); } }); } function my_update() { console.log("my_update"); db.leaderboard.update({name: "sunder"}, {$set: {score: 1337}}, function(err, result) { if(err || !result) { console.log("Score update failed"); } else { console.log("Score update successful"); updated = true; my_read(); } }); } function my_delete() { console.log("my_delete"); db.leaderboard.remove({name: "sunder"}, function(err, result) { if(err || !result) { console.log("Score delete failed"); } else { console.log("Score delete successful"); process.exit(); } }); } // kick off the flow of processes my_create(); 

如何将下一个动作传递给my_read()函数如下所示:

 // app.js var connection = "foo:bar@127.0.0.1/blah"; var collections = ["scores"] var db = require("mongojs").connect(connection, collections); function my_create() { console.log("my_create"); db.leaderboard.save({name: "sunder", score: 42}, function(err, result) { if(err || !result ) { console.log("Score save failed"); console.log(err); } else { console.log("Score save successful"); my_read("update"); } }); } function my_read(next_action) { console.log("my_read"); // app.js db.leaderboard.find({name: "sunder"}, function(err, results) { if(err || !results) { console.log("Score read failed"); console.log(err); } else { results.forEach(function(score) { console.log(score); }); // I am sure using globals is a HACK. Need to figure this out. if(next_action === "delete") my_delete(); else my_update(); } }); } function my_update() { console.log("my_update"); db.leaderboard.update({name: "sunder"}, {$set: {score: 1337}}, function(err, result) { if(err || !result) { console.log("Score update failed"); } else { console.log("Score update successful"); updated = true; my_read("delete"); } }); } function my_delete() { console.log("my_delete"); db.leaderboard.remove({name: "sunder"}, function(err, result) { if(err || !result) { console.log("Score delete failed"); } else { console.log("Score delete successful"); process.exit(); } }); } // kick off the flow of processes my_create();