我正在尝试使用callback来指示所有的async工作完成,但我越来越可怕了 TypeError:callback不是一个函数 。 我想单独处理数据中的每个元素,并在完成时,让queue.drain发送callback(data)来完成callback(data)刷新。 我一直在准备asynchronous文档 ,但显然我没有得到什么东西。 function refreshData(postData, callback) { var options = { host: 'www.myhost.com', port: 443, path: '/pulldata, method: 'POST', headers: { "Content-Type": "application/json" } }; var req = https.request(options, function(res) { var headers = res.headers var d = ''; res.setEncoding('utf8'); res.on('data', function (chunk) { d = d + chunk; }); res.on('end', function() […]
背景 :v8支持yield(旧消息,我知道),这是非常好的做的JavaScript代码callback,如在node.js中使用(请参阅https://wingolog.org/archives/2013/05/ 08 / generators-in-v8 ) 这个问题 :由于一个JavaScript协程可以调用C ++代码(通过一个模块),被调用的C ++如何执行一个yield操作呢? 为了显示: // javascript function* values() { yield 27; mycppmodule.someFunction(); } // c++ mycppmodule::someFunction() { __somehow_yield( 28 ); // how can we make this happen? } // user of the code above var o = values(); o.next(); // returns 27 – came from javascript above o.next(); […]
是否有可能做一个查找,然后保存使用asynchronous/等待承诺? 我有以下代码: try { var accounts = await Account.find() .where("username").in(["tkrones@gmail.com"]) .exec(); accounts.password = 'asdf'; accounts.save(); } catch (error) { handleError(res, error.message); } 我得到以下错误: ERROR: accounts.save is not a function
如果工作函数正在执行一些操作,比如从队列中选取一个项目并执行一些操作。 我将如何获得doWorkfunction的执行时间。 我想知道平均需要多less时间来完成工作。 示例代码 function doWork () { return Promise.resolve({first: 'Tony', last: 'Starks'}) } async function wrapper () { console.time('wrapper') const response = await doWork() console.timeEnd('wrapper') return response } Promise.all([ wrapper(), wrapper(), wrapper() ]).then((result) => console.info(result)) 产量 wrapper: 0.388ms [ { first: 'Tony', last: 'Starks' }, { first: 'Tony', last: 'Starks' }, { first: 'Tony', […]
我在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) […]
我想根据我收到的完成的请求而有所不同。 我正在发送POST请求并收到一个XML文件。 结果是成功或错误。 我使用xml2json将xml转换成json对象,然后根据我想要输出json的响应。 问题是,我不能在响应内部有一个响应。 我也不能保存callback的价值供以后使用(因为它的asynchronous)。 我曾经想过使用Promise,但我不确定。 我该怎么办? 操作顺序应该是 1)发送请求 2)获取缓冲区响应 3)join缓冲区。 将xml处理成JSON 4)根据JSON条目的types,如果xml响应res.json('error') ,则输出res.json('success')或res.json('error') 。 app.post('/api/submit', (req, res) => { … const request = https.request(options, (res) => { let chunks = []; res.on("data", function(chunk) { chunks.push(chunk); }); res.on("end", function(err) { if (err) throw err; let body = Buffer.concat(chunks); xmlConverter(body, function(err, result) { console.dir(result); if […]
是否有可能编写代码来包装任何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 […]
我需要通过telnet发送几个命令到服务器。 如果我尝试在每个命令之间没有时间延迟地发送它们,那么服务器就会吓坏了: var net = require('net'); var conn = net.createConnection(8888, 'localhost'); conn.on('connect', function() { conn.write(command_1); conn.write(command_2); conn.write(command_3); //… conn.write(command_n); }) 我猜服务器在发送命令n + 1之前需要一些时间来响应命令n 。 一种方法是写一些东西给日志,并假装“等待”: var net = require('net'); var conn = net.createConnection(8888, 'localhost'); conn.on('connect', function() { console.log('connected to server'); console.log('I'm about to send command #1'); conn.write(command_1); console.log('I'm about to send command #2'); conn.write(command_2); console.log('I'm […]
NodeJS + Express,MongoDB + Mongoose 我有一个JSON feed,每个logging都有一组“场地”属性(比如“场地名称”,“场地位置”,“场地电话”等等)。 我想创build一个饲料中的所有场地的集合 – 每个场地的一个例子,没有愚蠢。 我通过JSON循环testing场地是否存在于场馆中。 如果没有,保存。 jsonObj.events.forEach(function(element, index, array){ Venue.findOne({'name': element.vname}, function(err,doc){ if(doc == null){ var instance = new Venue(); instance.name = element.vname; instance.location = element.location; instance.phone = element.vphone; instance.save(); } } } 期望:所有场地的列表(没有模糊)。 结果:在场馆收集了大量的骗局。 基本上,循环为JSON提要中的每个logging创build了一个新的Venuelogging。 我正在学习Node及其asynchronous特性,所以我相信即使在第一个save()函数完成之前,for循环也会完成 – 所以if语句总是检查一个空集合。 Console.logging支持这个声明。 我不知道如何重做,以便它执行所需的任务。 我试过caolan的asynchronous模块,但是我无法得到它的帮助。 有一个很好的机会我使用不当。 非常感谢你指点我正确的方向 – 我已经无济于事了。 如果asynchronous模块是正确的答案,我想在这个特定情况下如何实现它的帮助。 再次感谢!
我在nodejs中使用mysql模块。 我想要做这样的事情,但问题是,查询的callback是asynchronous的,我不能正确地填充结果数组..我该怎么办? 谢谢! function fn(callback) { client.query( 'SELECT * FROM imbarcazioni', function select(err, ships) { if(err) { throw err; } ships.forEach(function(ship) { client.query( 'SELECT * FROM storico_imbarcazioni WHERE id_imbarcazione=' + ship.id, function select(err, hist) { ship.history = hist; } ); }); callback(hist); }); }