Tag: when js

当/节点liftAll不工作的S3对象

我正在尝试使用when/node提取Amazon S3对象中的所有函数。 var when = require('when'); var nodefn = require('when/node'); var AWS = require('aws-sdk'); var s3 = new AWS.S3(); var promisedS3 = nodefn.liftAll(s3); when(promisedS3.listBuckets()) .then(function(data) { console.log(data); }) 但是,它看起来像一个请求对象正在打印出来。 我对这里正在发生的事情感到不知所措,如果我单独提起这样的function,我可以得到正确的结果: var listBucketsP = nodefn.lift(s3.listBuckets.bind(s3)); 有任何想法吗?

要么“当-js”或基本的amqplib rabbitmq nodejs教程不工作

我有最新版本的nodejs(0.10.21,amqplib(0.1.0)( https://github.com/squaremo/amqp.node.git )和rabbitmq(3.2.0))。 启动rabbitmq-server 在安装npm包之后,转到amqp.node / examples / tutorials并运行./send.js。 它报告: [x] Sent 'Hello World!' 从rabbitmq的Web控制台,我可以看到它创build的连接,它创build队列“你好”。 但是,它实际上不会将任何消息发布到队列中。 除了RPC客户端/服务器外,其他教程都不适用于我 – 它们将创build交换,队列和通道,但不会发布消息。 我的一个朋友使用所有相同的版本运行正常,除了OS X 10.6,而不是10.8。 我使用节点检查器遍历了amqplib代码,看不到任何明显的错误。 它看起来好像没有创build消息框架,但在那个层面上,我现在还没有真正的想法。 当我通过Web控制台或使用Bunny + Ruby发布消息时,它会创build一个队列并按预期发布消息,所以它必须是node,amqp和/或OS X 10.8而不是rabbitmq的问题。 rabbitmq日志(拖尾两个日志)只提到连接打开,然后很快closures,但不报告任何错误: =INFO REPORT==== 27-Oct-2013::20:46:16 === accepting AMQP connection <0.731.0> (127.0.0.1:56927 -> 127.0.0.1:5672) =INFO REPORT==== 27-Oct-2013::20:46:16 === closing AMQP connection <0.731.0> (127.0.0.1:56927 -> 127.0.0.1:5672) 我嗅探了从amqp节点发送到rabbitmq的数据包。 这来自运行示例/教程中第一个示例“send.js”的amqp.node: http://www.limorph.com/files/amqp_amqnode_send.txt […]

如何使用node.lift-ed函数when.map?

我正在学习使用when.js库的承诺,并使用带有节点fs.readFile让我觉得我错过了一些东西。 当作为一个单独的promise被调用时, foo promise可以正常工作,但是在when.map作为映射器函数使用时会失败,因为index被注入为第三个参数(然后callback被传递为第四个参数)。 API doc说when.map对mapper函数有两个参数要求。 然后,mapper函数可以写成bar ,它可以在任何情况下工作。 var when = require('when'); var node = require('when/node'); var _ = require('lodash'); // readFile has the same signature as fs.loadFile function readFile(param1, param2, callback) { console.log(Array.prototype.slice.call(arguments)); callback(null, [param1, param2]); } var foo = _.partialRight(node.lift(readFile), 'base64'); var bar = function (fileName, index) { return node.lift(readFile)(fileName, 'base64'); }; when.map(['1', […]

mongoose与承诺不同

我使用when.js作为mongoose的承诺库,并试图获得不同的收集和返回结果作为承诺 mongoose.Promise= require("when"); function getPromisedDistinct(startDate, endDate) { return when.promise(function(resolve, reject) { $log.distinct("keys", { datetime: { "$gte": startDate, "$lt": endDate } }).exec() .then(function(res) { return resolve(res); }); }); } 但是getPromisedDistinct是用promise函数解决的 function (resolve, reject) { if (!_this.op) { callback && callback(null, undefined); resolve(); return; } _this[_this.op].call(_this, function(error, res) { if (error) { callback && callback(error); reject(error); return; […]

同步asynchronous创build的承诺

我正在做一个小的nodejs程序,并且有一些麻烦知道程序的所有asynchronous操作何时完成。 目前,该程序执行以下步骤: 1 /用一些参数产生一个进程。 这个过程将在其stdout上打印数据。 2 /听取进程标准输出“数据”事件,每次打印某些东西时,程序会调用一个函数(我们将称之为“进程”),使用这些数据。 3 /这个过程函数将最终将数据插入到mongo数据库并发送消息给amqp服务器。 3 /当没有更多数据时,由于与amqp和mongo数据库的连接仍然存在,所以程序空闲,所以我需要知道所有工作何时能够closures连接。 所以,我试图使用when.js来使用promise,但是我不能让它为我想要实现的目的而工作。 我让“process”函数返回一个promise,当mongodb insert和amqp消息发送完成后,这个promise就会被parsing。 在我的程序中,我正在创build一个数组,它将接收所有可以调用when.all()以了解何时全部parsing的承诺。 但是,因为当生成的进程将数据打印到它的stdoutstream时,我正在asynchronous创buildpromise,所以调用when.all()是由一个看起来立即解决的空数组构成的。 这里是一个代码示例,说明我实现了什么: var when = require('when') , _ = require('lodash') , cp = require('child_process'); var promises = []; function process(data) { var deferred = when.defer(); setTimeout(function () { deferred.resolve(true); }, 3000); // Let's say we need 3 seconds to process […]

如何使用catch,最后与when.map

我想使用when.map函数来处理一些数据。 数据处理后,我需要做一些清理(例如释放当前使用的数据库连接回连接池)。 我的方法使用catch的问题, finally是finally被调用,当第一个reject发生,而其他映射仍在进行中。 那么我怎么才能等到所有的映射承诺都完成了,这样才有可能做一个保存清理。 require('when/monitor/console'); var when = require('when'); function testMapper(value) { console.log('testMapper called with: '+value); return when.promise(function(resolve, reject) { setTimeout(function() { console.log('reject: '+value); reject(new Error('error: '+value)); },100*value); }); } when.map([1,2,3,4],testMapper) .then(function() { console.log('finished') }) .catch(function(e) { console.log(e); }) .finally(function() { console.log('finally') }); 产量 testMapper called with: 1 testMapper called with: 2 testMapper called […]

级联的承诺

除了一个简单的承诺之外,任何事情都会让我感到困惑。 在这种情况下,我需要在N个对象上连续执行2个asynchronous调用。 首先,我需要从磁盘加载文件,然后将该file upload到邮件服务器。 我更喜欢一起做这两个动作,但是我已经通过首先完成所有的读取操作并将所有的上传次要做到了。 下面的代码工作,但我不禁认为它可以做得更好。 有一件事我不明白的是为什么when.all不拒绝。 我对文件的解释似乎意味着,如果其中一个承诺被拒绝,那么所有的人都会拒绝。 为了testing错误,我已经提出了较低的解决scheme。 没有错误的事情似乎工作正常,是有道理的。 mail_sendOne({ from: 'greg@', to: 'wilma@', subject: 'F&B data', attachments: [ {name: 'fred.html', path: '/fred.html'}, {name: 'barney.html', path: '/barney.html'} ] }) .done( function(res) { console.log(res) }, function(err) { console.log('error ', err); } ) function mail_sendOne(kwargs) { var d = when.defer(); var promises = [], uploadIDs = […]