刚刚写了一个模块,抓住生产箱的当前IOStat,以确定是否过度工作。 有趣的问题 – 没有真正的方法来testing与Jasmine的callback函数; 至less,我发现了一个。 间谍是我想到的第一件事,但由于它实际上是直接调用函数,所以这是不可能的。 当然,我总是可以把这个函数定义为一个var并且做一个间谍。 proc.exec('iostat -c | tail -n2', function(err, out, s){ if(err) throw err; misc(); } 我想testing这个的唯一原因 – 是因为我正在开发一个没有所有这些命令的Windows机器,所以我想拦截它并抛出预期的结果。
我正在探索使用q而不是asynchronous – 然后我遇到了这里解决的问题: mongooseJS承诺? 或者如何pipe理批量保存 如果我使用q,这个答案会是什么?
我试图理解async包在代码并行化方面的行为。 据我所知,为了避免callback地狱/汤,结构代码是有帮助的,但这是唯一的优势吗? async.parallel([ function(next) { apiCallTo3rdParty(next); }, function(next) { apiCallTo3rdParty(next); }, function(next) { apiCallTo3rdParty(next); } ], function(err, res) { // do something else with returned data }); 在上面的代码中,所有三个API调用都将在不等待另一个完成的情况下进行。 根据规格。 最后的callback将在最长的API调用返回之后调用,因为其余的将在之前完成。 但是,如果我改变了代码,使它成为一对阻塞操作,会发生什么? async.parallel([ function(next) { sleep(5); }, function(next) { sleep(5); }, function(next) { sleep(5); } ], function(err, res) { // do something else with returned data […]
我有以下代码使用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它。 非常感谢你!
我试图理解对象stream的概念,尤其是两者的结合。 我正在寻找的用法是pipe道字节stream连同对象stream如: // StringifyStream reads Buffers and emits String Objects // Mapper is really just a classical map // BytifyStream reads String Objects and emits buffers. process.stdin.pipe( StringifyStream() ).pipe( Mapper(function(s) { return s.toUpperCase(); }).pipe( BytifyStream() ).pipe(process.stdout); // This code should read from stdin, convert all incoming buffers to strings, // map those strings to upper […]
现在我一直在使用node.js大约6个月。 但是,我想我还是不完全明白devise一个围绕asynchronous调用的程序。 以我最近的程序为例,它需要读取一个configuration文件,使用该configuration文件连接到数据库,然后asynchronous连接到数据库中的每个地址。 我使用模块fnoc和node-mysql ,但这只是伪代码。 // first, get the config fnoc(function(err, confs){ // code stuff in here //now check that there's a database config if (confs.hasOwnProperty("database")) { // set up db connection var mysql_conn = mysql.createConnection({ host: confs.database.host, user: confs.database.user, password: confs.database.password, database: confs.database.database }); // do some querying here. mysql_conn.query(query, function(err, records, fields){ records.forEach(function(host){ […]
我想运行Java运行CPU密集型并行任务,但为了避免比赛条件的复杂debugging,我决定尝试一个asynchronous程序模型 。 我有Node.JS的经验,我知道asynchronous的东西是如何工作的,我理解事件循环。 我想我不明白Vert.x中的工作者Verticles 。 想象下面的Java代码有3个CPU密集型进程(方法slowProcess())。 我怎样才能并行计算a,b和c? 是asynchronous模型适合这个,还是我应该使用正常的线程? asynchronous模型仅用于I / O操作吗? public class Race { public static void main(String[] args) throws Exception { long a=0, b=0, c=0; System.out.print("starting … "); //start the race // these 3 things should run in parallel a = slowProcess(a); b = slowProcess(b); c = slowProcess(c); // this should run after […]
我有一个expressJS应用程序接受一个请求,导致执行1K到50K fs.link()操作。 (甚至可能达到500K)。 请求(POST)不会在这种情况下被阻止。 我马上开始res.send(),使客户感到高兴。 但是,服务器然后“分叉”下面的工作,这需要去做所有的fs.links()发生asynchronous,但工作量(CPU,DISK等)意味着ExpressJS服务不是很响应在这段时间内对新的请求。 有没有一些简单的方法(除了childProcess)模拟分配一个低优先级的线程,将做这些文件链接? Job.prototype.runJob = function (next) { var self = this; var max = this.files.length; var count = 0; async.each(this.files, function (file, step) { var src = path.join(self.sourcePath, file.path); var base = path.basename(src); var dest = path.join(self.root, base); fs.link(src, dest, function (err) { if (err) { // logger.addLog('warn', "fs.link failed […]
我正在使用node.js和asynchronous包。 这是我有的代码: async.waterfall( [ function(callback) { var data = getSomeData(); callback(null, data); }, function(data, callback) { someFunctionThatNeedsData(data); callback(null, 'done'); } ], function(err, result) { } ); getSomeData具有一个asynchronousHTTP请求,用于从Web服务获取一些数据。 我想等待,直到我得到一个响应,然后返回该数据,并将其传递给一些someFunctionThatNeedsData 。 我期望的是getSomeData – 包括其内部的callback – 将不得不完成,然后再调用someFunctionThatNeedsData 。 问题在于,尽pipe在这里使用了waterfall函数,但data到达someFunctionThatNeedsData函数所需要的data还是未定义的。 另外,从console.log我可以看到getSomeData的结束是在getSomeData内部的callback甚至开始之前达到的。 我错误地使用了waterfall ,还是这里不是正确的工具? 如果它不对,我可以用什么来达到预期的效果? 或者我必须辞职,以深嵌套callback(未来的工作,我会),并不得不通过提取内联代码到命名函数缓解它?
我需要过滤一个数组,取决于从外部API中获取数据所获得的每个元素的子元素是否与条件匹配。 代码可能比解释更清晰: //Suppose there is an array filled //_.filter(array, predicate) var filtered_array = _.filter(array,function(element){ //Async operation webservices.doStuff(element, function(sub_element){ //This return is meant for the filter, but returns on .doStuff callback return sub_element.thing === "ok"; }); }); 这里的问题是我不知道如何返回谓词的结果,因为webservices.doStuff是asynchronous的! 任何想法?