Tag: callback

将数据注入asynchronouscallback(使用node.js)

我正试图围绕如何使asynchronous编程工作。 在我目前的使用情况下,我有可能被调用的函数每秒多次,他们有callback,依靠多个variables之间可能会改变。 一个简单的例子:(为了简洁起见,使用coffeescript) doSomething = (requestor, thing, action, callback) -> thing.takeAction action, (result) -> # actually a lot of times this nests down even further requestor.report result callback result 如果在thing.takeAction返回其结果之前doSomething被多次调用不同的数据, 我认为我不能依赖于请求者和callback仍然是我需要它们的相同的东西。 正确? 为了避免这种情况,我需要以某种方式将请求者和callback注入takeAction的callback函数。 这有可能吗? 我有这样的想法 doSomething = (requestor, thing, action, callback) -> thing.takeAction action, (result, _requestor = requestor, _callback = callback) -> _requestor.report result _callback […]

为什么在节点js的一个callback函数中为全局variables赋值以在控制台中返回undefined?

以这个例子 var s; cb = function(error,result){ s = result; } memcached.get('hellow',cb); console.log(s); 这给我undefined 。 我的代码有什么问题?

Node.jscallback与node_redis

我仍然试图进入node.js,可能会得到一些不太正确的东西。 我期望完成的是首先查询包含房间列表的hmap。 这个列表将会迭代低谷获得每个房间的更多细节,如房间名称等。 以下是查询应该返回的内容: redis 127.0.0.1:6379> lrange rooms 0 -1 1) "room:5000" 和 redis 127.0.0.1:6379> hgetall room:5000 1) "name" 2) "room1" 3) "admin" 4) "user:1001" 5) "public" 6) "true" 这里是routes.index中的函数 exports.index = function(req, res){ var render_rooms = new Array(); req.app.settings.redis.lrange('rooms',0,-1, function(error, rooms) { if (error) { console.log('Error: '+ error); } else { rooms.forEach(function(room){ console.log("room: " […]

在循环node.js中callback

我不明白如何在循环中设置callback: models.chat_user.find( {user_id: app.locals.session.user._id}, function(err, result){ if(result.length < 1){ chat.user = new models.chat_user({ user_id: app.locals.session.user._id }) chat.user.save(); } models.chat_user.find(function(err, result){ for(value in result){ models.user.findOne({_id: result[value].user_id}, function(err, user){ chat.users[value] = {}; chat.users[value].username = user.username chat.users[value].mail = app.locals.user.getAvatar(user.mail, 50); }); } }) }); 当我在循环中find所有数据时,我想设置一个callback函数,但是我不知道如何使用result.lenth的条件,但这不是很干净 谢谢

是否可以在nodejs中使用一些同步代码

我明白,对于I / O操作(即数据库查询,Web请求和磁盘访问),您必须使用这样的callback fs = require('fs') fs.readFile('test.txt', 'utf8', function (err,data) { if (err) { return console.log(err); } console.log(data); }); 但是要说你是否有这样的代码同步 function Player(name){ this.name = name; this.score = 0; } Player.prototype.calcScore = function(){ //some special code here to calculate the score this.score =+ 10; } var player = new Player("Sam"); player.calcScore(); console.log(player); 或者,你需要写在像下面这样的callback风格,calcScore方法只包括一个for循环和一个if语句,不会查询数据库等。 function Player(name){ this.name […]

Node.js的 混淆了非阻塞的方法

好吧,似乎我很难开始思考..嗯..function的方式..或asynchronous的方式。 我对node.js比较陌生,但是我有很多年的C#,java,c ++经验。 图片我有简单的任务。 这个任务的想法是每一行都应该在上一行完成之后执行(阻塞操作)。 正常的做法,让我说,C#。 此外,(这是这篇文章的原因)让我们想象我们在我们的代码中有一条条件线。 这个伪代码如下: f = OpenFile("aaa.txt") If f.ReadLine(1) == "bbb" // read the first line line = f.ReadLine(2) // read the second line else line = ReadLine(3) // read the third line DataBase.Insert(line) // store the line in some database, lets say in mysql DeleteFile(f) 很简单。 现在,据我所知,node.js通过向几乎每个函数添加callback来使用非阻塞方法。 这样,这个简单的任务似乎成了我的噩梦。 如果我尝试重现上面的代码,它将如下所示: OpenFile(f, […]

Javascript:返回在eval中创build的值

我想要做这样的事情: function end(){ console.log(this); } // <– the problem is here with `this` eval('var a = 0; setTimeout(function(){ a = 10; end(); }, 2000)'); 2秒后应输出: { "a" : 10 } 这有可能吗?

从node.js本地代码调用callback

我正在使用c ++编写node.js的附加组件。 这里有一些片段: class Client : public node::ObjectWrap, public someObjectObserver { public: void onAsyncMethodEnds() { Local<Value> argv[] = { Local<Value>::New(String::New("TheString")) }; this->callback->Call(Context::GetCurrent()->Global(), 1, argv); } …. private: static v8::Handle<v8::Value> BeInitiator(const v8::Arguments& args) { HandleScope scope; Client* client = ObjectWrap::Unwrap<Client>(args.This()); client->someObject->asyncMethod(client, NULL); return scope.Close(Boolean::New(true)); } static v8::Handle<v8::Value> SetCallback(const v8::Arguments& args) { HandleScope scope; Client* client = […]

编写自己的node.jscallback函数的最佳做法是什么?

我已经阅读了许多关于如何编写callback的教程。 但是,这些都不能真正推荐推荐的devise。 想象一下这样一段代码,它通过假想的查询函数通过虚构的数据库login用户,以保持简单,但仍然可以编译和运行: var db = {}; // fake query function for demonstration purposes db.query = function(query, cb) { console.log('Running an expensive query:', query); if (query == 'get uid from db') return cb(null, {password: 'pwd'}); return cb(null, {password: 'pass'}); } var login = function(user, password, cb) { var q = 'get ' + user + […]

创build一个用于AJAX的简单Node.js Web服务

我有一个基本的Node.js HTTP服务器设置为每个文档,我试图创build一个非常简单的Web服务,我可以跟Javascript(AJAX)交谈,然后我将连接到Arduino。 这是一个testing,我可能走下去的东西,但事实certificate这很有趣。 无论如何,这里是服务器端的JavaScript: var http = require('http'); var _return = 'Bing Bong'; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'application/jsonp'}); //do stuff res.end('_return(\'Hello :-)\' + _return)'); }).listen(process.env.VMC_APP_PORT || 1337, null); 这是客户端: function experimentFive(node) { console.log('X5 Func started'); console.log('Calling Node.js service'); var nodeURL = node; $.ajax({ url: nodeURL, dataType: "jsonp", jsonpCallback: "_return", cache: false, timeout: 50000, […]