Tag: callback

本地callback函数Async.waterfall

我正在实施一个用Node.js编写的项目,并从Mysql获取值。 当我在我的项目更深入我的嵌套callback像这样 hold.getEntry(function(data){ var ref = data.ref; var id = data.id; var message = data.mess; var json = JSON.parse(message); if(ref === null){ } else { hold.checkPositionCandidate(ref, id, json, function(dataa){ console.log("checker " + dataa); if(dataa == false){ } else { //\/ here I get error callback is not a function hold.getVoterCount(id, json, function(votercount){ if(votercount.count == 0){ […]

未使用callback时未定义的结果。 Nodejs,Express和SQL Server Express

以下问题由mssql,Nodejs,Gulp,Express和SQL Server Express组成。 我能够成功login到SQL Server Express。 但是,当我使用bookRoute.js代码片段而没有callback时,返回的值是未定义的 。 然而,当我使用callback,我得到的数据。 不过,我不明白为什么。 app.js代码片段: var config = { user: 'user', password: 'password', server: 'localhost', database: 'Books', options: { instance: 'SQLEXPRESS' } }; sql.connect(config, function(err){ console.log(err); }); 没有callback的bookRoute.js代码片段: bookRouter.route('/') .get(function (req, res) { console.log('book router'); var request = new sql.Request(); request.query('select * from books').then( function (err, recordset) { console.log(recordset); […]

快速路由使用callback函数时未定义的参数

目前,我在Express中使用了很多路线。 有些路线可能相当长。 常见的路线如下所示: router.get('/api/comments', function(req, res, next){ Comment.find({"user": req.payload._id}).exec(function(err,comments){ if(err){return next(err); } res.json(comments); }) } 这工作正常。 但是我多次拨打电话,可能会很长。 所以我试图创build一个可以被各种路由调用的callback函数。 例如 var testFunction = function(req, res, next){ Comment.find({"user": req.payload._id}).exec(function(err,comments){ if(err){return next(err); } res.json(comments); }) } router.get('/api/comments', testFunction(req,res,next)); 但是,我总会在最后一行得到“请求未定义”错误。 只是想知道我在做什么错在这里?

从一个承诺的价值传递到下一个

有点新的JavaScript。 一直在处理承诺,但遇到了一个问题,我不知道如何处理。 我怎样才能将价值传递给下一个承诺的决心? 这是我的代码 bot.on('ask.add_account_password', (msg) => { let username = users[msg.from.id].username; let password = msg.text; var accounts = require('./inc/account.js'); accounts.login_account(username,password).then(function(data){ var account = data.params; console.log(account); return accounts.store(msg.from.id,username,password,account.followerCount); }).then(function(data){ let caption = "Your account "+account.username+"("+account.fullName+")has been added\n"; return bot.sendPhoto(msg.from.id, account.picture, {caption:caption}); }) .catch(function(error){ console.log(error); add_account(msg,error.name); }); }); 在我创build标题variables的行上,我试图访问该块中创build的帐户对象(var account = data.params)之前,但我得到一个参考错误,说它没有定义。 现在我可以很简单地通过将整个对象发送到accounts.store函数并在完成时parsing对象来绕过这个问题,但对于一个更大的问题,这似乎是一个肮脏的解决方法。 有没有更干净的方法来做到这一点?

将parameter passing给callback node.js

我在Node.js中开发一个RESTful应用程序,并使用https库实现http请求。 目前,每个文件都包含一个带有特定参数的http请求,你可以在下面的代码中看到: //test.js var https = require('https'); module.exports.httpResponse = function (callback) { var options = { host: 'api.github.com', path: '/users/Guilherme-Routar', method: 'GET', //headers: {'user-agent': userAgent} } var str = ''; var request = https.request(options, function (response) { response.on('data', function (body) { str += body; }); response.on('end', function () { return callback(str); }); }); request.on('error', (e) […]

自动包装任何node.jscallback

是否有可能编写代码来包装任何node.js I / Ocallback与我自己的function? (当我说I / Ocallback函数我的意思是在一些I / O操作后被调用的函数) 为什么我需要这样的事情? 例如:我有一个socket.io服务器我有一堆全球性的function,我实际上是作为一个input(我不能改变它,甚至没有读它,我只是把它粘贴在我的代码中) socket.io.connect(socket,… callback)的callback与这些全局函数交互。 现在在新的连接上,我们在全局级别上设置对当前套接字的访问权限。 编写这些全局函数的程序员知道currentSocketvariables并使用它。 问题是,在调用一些asynchronousI / O函数之后,其他一些用户/套接字可能会连接并更改currentSocket,稍后在执行asynchronousI / O函数时,currentSocket将等于不同的用户/套接字,而不是原来的用户/套接字调用了asynchronous函数 我想也许我可以自动包装I / Ocallback和closurescurrentSocketvariables,但我不知道该怎么做…任何想法? var currentSocket = undefined; io.sockets.on('connection', function (socket) { currentSocket = socket; socket.on('msg', function (data) { global[data.functionToInvoke]; }); }); //global function that I can't change or even analyze/read //======================================================== function g1(){ //might use […]

如何从asynchronous调用中返回值

我在coffeescript中有以下function: newEdge: (fromVertexID, toVertexID) -> edgeID = this.NOID @client.methodCall('ubigraph.new_edge', [fromVertexID, toVertexID], (error, value) -> if(error) console.log('ubigraph.new_edge error: ' + error) edgeID = value ) edgeID 其中@ client.methodCall是指xmlrpc库。 我的问题是如何返回值为edgeID。 我是否使用callback? 如果是这样,callback应该是这样的:? # callback is passed the following parameters: # 1. error – an error, if one occurs # 2. edgeID – the value of the returned […]

Node.js – 为什么我的一些callback不是asynchronous执行的?

Noob关于使用callback作为控制stream模式与Node和http类的问题。 根据我对事件循环的理解,所有的代码都是阻塞的,I / O是非阻塞的,使用callback函数,下面是一个简单的http服务器和一个伪rest函数: // Require var http = require("http"); // Class function REST() {}; // Methods REST.prototype.resolve = function(request,response,callback) { // Pseudo rest function function callREST(request, callback) { if (request.url == '/test/slow') { setTimeout(function(){callback('time is 30 seconds')},30000); } else if (request.url == '/test/foo') { callback('bar'); } } // Call pseudo rest callREST(request, callback); } […]

callback金字塔,甚至与当时的承诺

我有三个function,我想要一个接一个地执行,只有当前一个function完成任务。 我使用当Promise库这个, function taskA(){ var d = when.defer(); d.resolve(); return d.promise; } function taskB(){ var d = when.defer(); d.resolve(); return d.promise; } function taskC(){ var d = when.defer(); d.resolve(); return d.promise; } taskA().then(function(){ taskB().then(function(){ taskC().then(function(){ }); }); }); 这是应该如何? 我的印象是,我可以很容易地避免使用承诺callback和它的“厄运金字塔”,或者我用他们错了吗?

node.js中的async.js瀑布:如何使用bind和这个?

我正在学习来自具有有限JavaScript级别的PHP背景的node.js。 我想我现在已经解决了asynchronous方法所隐含的思维方式的变化。 我喜欢它。 但是,和我之前的很多人一样,我很快理解了“厄运金字塔”的具体含义。 所以我build立这些小的“虚拟”路线和视图,以了解如何正确使用Async.js。 我只花了最后5个小时写下面的代码(当然重写了几十次)。 它的工作原理,但我想知道如何进一步,使这个代码更简单(不详细,更容易阅读和维护)。 我在网上发现了很多资源,特别是在这里,但总是通过一些信息在这里和那里。 我猜在这一点上,我应该使用“绑定”和“this”与async.apply使缩短瀑布调用的最后2个函数。 问题是获取对象“db”定义,所以我可以使用它的“收集”方法(第二个function)。 我真的search了一个谷歌的例子,但是你不能直截了当地find“asynchronous瀑布绑定”(以及我试过的许多关键字变体)的例子。 当然有答案,但似乎没有什么与这个特殊问题有关…矿石,很可能,我还没有理解他们。 有人可以帮我吗? 我会很感激。 app.get('/dummy', function(req, res) { var MongoClient = require('mongodb').MongoClient; async.waterfall( [ async.apply(MongoClient.connect, 'mongodb://localhost:27017/mybdd'), function(db, callback) { db.collection('myCollection', callback); }, function(collection, callback) { collection.find().sort({"key":-1}).limit(10).toArray(callback); } ], function(err, results) { if (err) console.log('Error :', err); else { res.render('dummy.jade', { title:'dummy', results: results} ); } […]