Tag: callback

何时使用callback和承诺?

我是NodeJs和JS的新手。 我编写我的第一个应用程序使用callback无处不在,我到达了一个状态,我不能处理嵌套callback数量(callback地狱)。 所以我search了解决scheme,并且我看到Promise是解决这个问题的最好方法之一。 顺便说一句,这是一个很好的解释对于那些有兴趣的人: https : //blog.risingstack.com/node-js-async-best-practices-avoiding-callback-hell-node-js-at-scale/ 因此,我使用Promise对最重要的函数进行了重构,效果很好。 但是,我不知道是否应该重构所有的应用程序。 JS开发人员现在如何做? 他们在任何地方都使用Promise,或者他们大部分时间都在使用callback,只有在嵌套callback过多时才使用Promise。 对此有最佳做法吗?

TypeError:callback不是一个函数 –

我有这个代码是Pipl API包装的一部分,我得到这个错误: 这个主代码做一个获取请求,并从API返回信息 期待得到你的帮助:) return callback(err, JSON.parse(body) || body); TypeError: callback is not a function 这里有什么问题? 我该如何解决这个错误? (function() { var _ = require('lodash') , request = require('request') , util = require('util') , url = require('url'); var Handler = function(subClass) { this.createCall = function(method, path, options, callback) { return function(config) { if (_.isFunction(options)) { callback = […]

再次将单独的asynchronous分支重新导回到一个分支中

我正在使用express和mysql库的节点js应用程序。 我有一个MySQL用户表与以下列: 自动递增主要ID 用户名varchar唯一 没有密码等 其他表格包括: 房间 ID ROOM_NAME user_room ID user_id(FK到用户表) room_id(FK到房间表) 细节 ID user_room_id(FK到user_room表) COL1 COL2 COL3 在尝试连接到一个房间时,我希望数据库尝试为该房间拉取他们的数据。 如果数据不存在,我想查看用户名是否存在于用户表中。 如果用户名存在,我想获得他们的ID。 如果用户名不存在,我想将他们的名字添加到用户表中,并捕获最后插入的ID 一旦拥有了自己的ID,我想为该用户的user_room表添加一条logging,然后根据user_room表中新插入的ID为细节表添加几条logging。 我似乎陷入了一个混乱的networking进入这么多层。 这是我的代码目前的样子: socket.on('enter room', function(data, callback){ var sql = "select col1, col2, col3 from room JOIN user_room on room.id = user_room.room_id JOIN user on user_room.user_id = user.id JOIN details on user_room.id […]

Node.js – 更好的方式来pipe理JavaScript范围之间的callback?

我正在与Node.JS工作,并有两个对象,我通过callback之间移动。 我想出了一个解决scheme来维护范围引用到正确的对象。 我试图找出是否有更好的方法来做到这一点,或者如果这是一个很好的做法。 function Worker () {} Worker.prototype.receiveJob = function(callback, bossReference) { this.doJob(callback, bossReference); }; Worker.prototype.doJob = function(callback, bossReference) { callback.call(bossReference); // callback(); // this will not work }; function Boss () { this.worker = new Worker(); } Boss.prototype.delegateJob = function() { this.worker.receiveJob(this.whenJobCompleted, this); }; Boss.prototype.whenJobCompleted = function() { this.sayGoodJob(); }; Boss.prototype.sayGoodJob = function() { […]

无法使用本地主机上的node.js将消息发送给不在线的人

我有节点和运行与socket.io。 我能够发送消息给在我的服务器上联机的人(谁的套接字连接打开)。 但是,当我尝试发送多个人与至less一个离线它不经过。 如果所有都在线,它会通过。 任何帮助如何解决这个问题? client.on('message_from_client',function(data){ for(var i=0;i<data.length;i++){ if(data[i].message_to!=''){ client.emit("update_message_from_server", data[i]); if(data[i].message_to != client.username){ var message_to = data[i].message_to; var array =data[i]; redisClient.SISMEMBER('online',message_to,function(err,reply){ if(reply!=0){ redisClient.get(message_to,function(err,reply2){ if(reply2!=null){ io.sockets.sockets[reply2].emit("update_message_from_server",array ); } }); }else{ console.log("Offline"); } }); } }else{ client.emit("update_message_from_server", data[i]); } } }); 数据是一个JSON对象。 如果我有任何数据[我] .message_to离线我只能发送到客户端,但没有其他套接字。 如果我有网上所有条目,我可以将它发送到客户端和其他套接字

Node-Postgres查询方法不调用它的callback函数

我有以下代码使用node-postgres: var client = new pg.Client(conString); client.connect(function(err) { if(err) { throw new Error(console.error('could not connect to postgres '+ err)); } }); client.query('select * from public.spatial_ref_sys', function(err, result){ console.log('ffdafda'); throw new Error('kokpokopko'); }); 我会想这个代码执行时,'ffdafda'将被打印到屏幕上,并会出现错误消息'kokpokopko'将被抛出。 我甚至在debugging器中停留了一个永不折断的断点。 由于这些事情从来没有发生,我假设callback从来没有被调用。 有什么select我需要为了得到callback被称为? 我正在阅读文档,我什么都看不到。 注意client.query被调用是很重要的。 我已经通过检查它的返回值来certificate它。 非常感谢你!

如何使用callback从主函数通过nodejs中的嵌套函数返回?

我正在尝试编写validation函数,validation我的请求标头。 如果所有标题都正确,则返回true;如果有错误,则返回false。 我对每个(几乎)请求都执行这个函数。 问题是,我不知道如何返回主函数的情况下,我使用callback和设置任何标志不起作用,由于一些问题与variables范围。 当我没有callback的时候,一切都很好,我只是用下划线来查询我的JSON。 现在我使用NeDB并绑定callback,我无法完成工作。 我试图使用一个全局的“res”variables,但问题是,当我将参数“cnt”的值(如果没有find标记为0,如果有一个标记为1)分配给“res”,那么“res “总是在”cnt“后面迭代1次:ie: request1 (valid): cnt = 1; res = undefined; request2 (valid): cnt = 1; res = 1; request3 (invalid): cnt = 0; res = 1; request4 (valid): cnt = 1; res = 0; 我所要做的就是在“cnt”= 1的情况下使用true返回主函数,如果使用全局variables或使用其他方法,则在“cnt”= 0时返回false。 function validateHeaders(request) { if (request.headers.username && request.headers.deviceid) { if (…) { function […]

防止在NodeJS上双重运行

我在我的nodejs应用程序的路由中有以下,但它每次运行两次,并尝试发送这两个文件。 如何阻止它运行两次。 app.get('/', function(req, res){ data = validate(req.cookies.user,req.cookies.code,function(data) { if (data == 'false'){ console.log('send to login'); res.sendFile(__dirname + '/views/login.html'); } else { console.log('send to chat'); res.sendFile(__dirname + '/views/chat.html'); } console.log('USER DATA'+data); }); }); 首先运行正常,需要停在那里。 但它会自动运行第二次,并未定义结果。 它调用以下function,这是一个正在进行的工作。 function validate (user, code, callback) { con.query( "SELECT * FROM tbl_users WHERE id = "+con.escape(user)+" and code = "+con.escape(code), […]

在node.js中,何时使用事件,何时使用直线callback函数?

在我看来,“核心”node.jscallback语法,即 function foo(data, callback) { callback(false, data2); } 在语义上被事件所取代,除此之外 随着事件,你失去了静态检查的最后一点 活动更灵活 一旦你有超过2或3个callback函数,callback变得相当笨拙 事件可能是一个非常轻微的性能开销(但过早的优化在几乎所有情况下都是轻描淡写) (但是再一次,你也必须记住事件…) 那么什么时候使用什么是一个好的策略呢?

匿名函数和node.js中的=>符号有什么区别?

我只是想用node.js读取一个文件。 我曾经使用这个符号: fs.readFile('/etc/passwd', function(err, data) { if (err) throw err; console.log(data); }); Node.js的文档提供了以下代码: fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); }); 他们之间有什么区别?