Tag: 承诺

如何保证node.js脚本处于活动状态,同时承诺正在解决?

我的脚本使用promise(使用q库)执行一些asynchronous任务。 运行摩卡testing工作正常。 但是从命令行运行脚本不会。 节点进程立即死亡。 var bot = require('./bot'); bot.getCategories().then(function (categories) { console.log('Found ' + categories.length + ' categories'); });

发电机function与蓝鸟和coexpression

我正在尝试使用节点0.12中的一些和声function,特别是尝试使用新的生成器function。 我正在用co(v4),bluebird和express(v4)这样做,就像这样: // … var fs = bluebird.promisifyAll(require('fs')); // … app.post('/test', co.wrap(function* (req, res, next) { var contents = yield fs.readFileAsync('/etc/hosts', 'utf8'); return res.send(contents); })); // … 根据它的文档,co.wrap返回一个正常的函数,它返回给定生成器函数的promise。 到目前为止,这是工作正常,但我不知道的是,如果a)我通过不等待返回的承诺的结果泄漏内存和b)如果我可能会失去一个exception抛出我的生成器函数,或一它使用的模块。 这是一个好方法吗? 你看到有什么不对吗?

使用node-redis和节点8 util.promisify

节点-v:8.1.2 我使用redis客户端node_redis与节点8 util.promisify,没有blurbird。 callbackredis.get是好的,但promisifytypes获取错误消息 TypeError:无法读取未定义的属性'internal_send_command' get(D:\ Github \ redis-test \ node_modules \ redis \ lib \ commands.js:62:24) 在get(internal / util.js:229:26) 在D:\ Github \ redis-test \ app.js:23:27 在对象。 (d:\ Github上\ redis的testing\ app.js:31:3) 在Module._compile(module.js:569:30) 在Object.Module._extensions..js(module.js:580:10) 在Module.load(module.js:503:32) 在tryModuleLoad(module.js:466:12) 在Function.Module._load(module.js:458:3) 在Function.Module.runMain(module.js:605:10) 我的testing代码 const util = require('util'); var redis = require("redis"), client = redis.createClient({ host: "192.168.99.100", port: 32768, }); let […]

触发事件触发事件

我的整个项目使用(蓝鸟)承诺,但有一个使用EventEmitter的特定图书馆。 我想实现这样的事情: Promise.on('connect', function() { x.doSomething(); }).then(function() { return new Promise(function(resolve) { y.doAction(resolve); // this will result in `eventB` getting emitted }); }).on('eventB', function() { z.handleEventB(); }).then(function() { z.doSomethingElse(); }); 我在Promises链的中间读到了EventEmitter的答案。 这给了我一个方法来执行“连接”事件的callback。 这是我到目前为止的地方 var p = new Promise(function(resolve) { emitter.on('connect', resolve); }); p.on = function() { emitter.on.apply(emitter, arguments); return p; }; p.on('connect', function() { x.doSomething(); […]

testing失败的承诺与摩卡的内置承诺支持

我应该怎样用摩卡和柴来testing我的诺言失败了? 我很困惑,因为我最初认为我应该使用'mocha-as-promised',但是这个包现在已经被弃用了(我正在使用mocha 2.1.0),build议只使用现在内置的promisevalidation摩卡。 请参阅: https : //github.com/domenic/mocha-as-promised 另一篇文章build议废除it()callback的“完成”参数 – 不知道为什么,因为我理解传入“done”参数是表示testing正在被asynchronoustesting的方式。 见: 我如何正确地testing摩卡和柴的承诺? 无论如何,我试图减less我的问题到下面的代码 – 请帮我修改这个,以便我可以testing我的承诺确实失败。 it.only("do something (negative test)", function (done) { var Q = require('q'); function makePromise() { var deferred = Q.defer(); deferred.reject(Error('fail')); return deferred.promise; }; makePromise() .then(done, done); });

与承诺Knex交易

我得到了正确的结果,实际上,这两个行动正在被视为一个单一的交易单位; 如果一个失败了,两个失败。 在这个代码示例中:我正在做一个事务 (1)插入(2)更新 我接近它的方式是将我的数据库操作嵌套在.then中。 我的问题是,如果这个代码是正确的意外? 我是新承诺和knex。 knex.transaction(function(t) { knex('foo') .transacting(t) .insert({id:"asdfk", username:"barry", email:"barry@bar.com"}) .then(function() { knex('foo') .where('username','=','bob') .update({email:"bob@foo.com"}) .then(t.commit, t.rollback) }) }) .then(function() { // it worked }, function() { // it failed }); 这工作,但我觉得我仍然做错了什么。 寻找意见。

对象方法与ES6 /蓝鸟承诺

我使用harmony标志在Windows上使用节点v0.11.14-nightly-20140819-pre 。 我有JavaScript对象,在其原型中定义了两个方法: function User (args) { this.service= new Service(args); } User.prototype.method2 = function (response) { console.log(this); // <= UNDEFINED!!!! }; User.prototype.method1 = function () { …………. this.service.serviceMethod(args) .then(this.method2) .catch(onRejected); }; function onRejected(val) { console.log(val); } Service对象的serviceMethod返回一个promise。 当我使用如下的User对象: let user = new User(args); user.method1(); this在对象的方法2中User一旦被调用一旦被调用then结束了undefined 。 我试过使用ES6和蓝鸟承诺实施。 为什么最终在这种情况下undefined ?

蓝鸟诺言串行迭代,并解决修改数组?

我有这个承诺,创build一个新的Item文件,如果没有在数据库中find,然后将其存储在以前创build的Collection文档.. Collection文档是数组中的第一个string,数组中的任何后续索引都将转换为一个或多个Item文档。 Promise.each “解决原始数组未经修改” ,所以Promise.each的最后一个return是呈现对象,但后来。然后生成原始数组.. 这是诺言(缩写为可读性): globalVar = true; collectionId = ""; var itemSeries = Promise.each(items, function(element) { if (globalVar == true) { return Models.Collection.findOneAsync({ "name": element }) .then(function(collection) { // promise chain similar to the following else.. // set the collectionId var to an _id }); } else { return Models.Items.findOneAsync({ "name": element }) […]

我应该在Promise中使用return吗?

function saveToTheDb(value) { return new Promise(function(resolve, reject) { db.values.insert(value, function(err, user) { // remember error first 😉 if (err) { return reject(err); // don't forget to return here } resolve(user); }) } } 这里是我从这里看到的代码。 我很困惑关于return关键字。 为了resolve(user); 我需要return吗? reject(user); 我需要return吗?

使用按键在node.js中启动操作

我正在使用node.js v4.5 我写了下面的函数来延迟发送重复的消息。 function send_messages() { Promise.resolve() .then(() => send_msg() ) .then(() => Delay(1000) ) .then(() => send_msg() ) .then(() => Delay(1000)) .then(() => send_msg() ) ; } function Delay(duration) { return new Promise((resolve) => { setTimeout(() => resolve(), duration); }); } 而不是延迟,我想激活使用按键发送消息。 类似下面的function。 function send_messages_keystroke() { Promise.resolve() .then(() => send_msg() ) .then(() => keyPress('ctrl-b') […]