Tag: 承诺

如何使用承诺的Socket.IO?

作为持续努力的一部分,我将目前的callback技术转变为使用blue-bird承诺库的承诺。 我想用Socket.IO来实现这个技巧。 我怎样才能使用Socket.IO承诺而不是callback? 有没有使用Socket.IO的标准方式? 任何官方解决scheme

Nodejs – 承诺,未处理的终止和内存泄漏

寻求有关使用promise的nodejs专家的帮助。 我有以下testing程序,其中我调用asynchronous“q”函数,只是抛出一个exception。 这个程序相当一致地泄漏内存; 但如果取消注释.done()调用,则泄漏消失。 为什么泄漏发生在承诺未终止(即没有完成()调用)? 我试图按照文档 ,但无法理解done()方法的解释。 在此先感谢您的帮助! 这是我的代码: (function() { var MAX_ITER_COUNT, Q, iterCount, maxMem, noop, qDoit, test; Q = require("q"); iterCount = 0; MAX_ITER_COUNT = 10 * 1000; maxMem = 0; noop = function() {}; qDoit = function() { var currentMem; currentMem = Math.round(process.memoryUsage().heapUsed / 1024 / 1024); if (currentMem > maxMem) { […]

如何修复bookshelfjs事务中的嵌套结构

我想在单个书架交易中更新多个数据库表。 我可以使用一些帮助重构我的代码。 我是新来的节点,并没有很好的理解承诺,但下面的嵌套结构不是很漂亮,我希望有一个更干净的方式。 任何帮助,将不胜感激。 function insertUser(user, cb) { bookshelf.transaction(function(t) { var key = user.key; Developer.forge({key: key}) .fetch({require: true, transacting: t}) .then(function(developerModel) { var devID = developerModel.get('id'); Address.forge(user.address) .save(null, {transacting: t}) .then(function(addressModel) { var addressID = addressModel.get('addressId'); Financial.forge(user.financial) .save(null, {transacting: t}) .then(function(financialModel) { var financialID = financialModel.get('financialId'); var userEntity = user.personal; userEntity.addressId = addressID; userEntity.developerId = […]

如何确保在stream完成处理后执行asynchronous代码?

我有一个stream,通过侦听data , error和end事件来处理,我调用一个函数来处理第一个stream中的每个data事件。 当然,处理数据的函数会调用其他callback函数,使得它是asynchronous的。 那么当stream中的数据被处理时,我该如何开始执行更多的代码呢? 在stream中收听end事件并不意味着asynchronousdata处理function已经完成。 当我执行下一个语句时,如何确保stream数据处理函数完成? 这里是一个例子: function updateAccountStream (accountStream, callThisOnlyAfterAllAccountsAreMigrated) { var self = this; var promises = []; accountStream .on('data', function (account) { migrateAccount.bind(self)(account, finishMigration); }) .on('error', function (err) { return console.log(err); }) .on('end', function () { console.log("Finished updating account stream (but finishMigration is still running!!!)"); callThisOnlyAfterAllAccountsAreMigrated() // finishMigration is still running! […]

带callback的链类方法?

在Node.js中,如何将类方法链接到一起,最好使用callback函数? 在我的PHP日子里,我通常会做这样的事情: class MyClass { function get() { // fetch some data from an API endpoint return this; } function set(property, value) { // Set the property to some value on the object return this; } function save() { // Save the data to database return this; } } $myObject = new MyClass(); $myObject->set('something','taco')->save(); 这种非常常见的面向对象方法允许您将方法连接在一起。 […]

正确的方法来堆栈选项承诺

用承诺收集来自数据库的所有数据的适当或最好的方法是什么,但使用本地Node承诺。 目标只是提出select什么: const allPromises = []; const selected = { sectionA: true, sectionB: false, sectionCIds: [ 1, 2, 4 ], }; if (selected.sectionA) { allPromises.push(getSectionADataFromDbPromise()); } if (selected.sectionB) { allPromises.push(getSectionBDataFromDbPromise()); } if (selected.sectionCIds.length > 0) { allPromises.push(selected.sectionCIds .map(getSectionCDataFromDbPromise) ); } Promise.all(allPromises) .then((allResults) => { if (selected.sectionA) { dataA = allResults[0]; } if (selected.sectionA) { dataB […]

级联的承诺

除了一个简单的承诺之外,任何事情都会让我感到困惑。 在这种情况下,我需要在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 = […]

如何用promise来asynchronous读取多个文件,然后继续

我刚刚承诺并使用rsvp实现。 我想asynchronous读取文件列表,然后只有在读取完所有文件后才能继续执行另一个任务。 我已经有了基本的结构来读取一个文件,并链接到下一个任务: var loadFile = function (path) { return new rsvp.Promise(function (resolve, reject) { fs.readFile (path, 'utf8', function (error, data) { if (error) { reject(error); } resolve(data); }); }); }; loadFile('src/index.txt').then(function (data) { console.log(data); return nextTask(data); }).then(function (output) { //do something with output }).catch(function (error) { console.log(error); }); 我想要做这样的事情: loadFile(['src/index.txt', 'src/extra.txt', 'src/another.txt']).then( … 我在文档中看到了承诺和承诺的 […]

与蓝鸟诺言使用ldapjs

我在这里发布类似的东西: 使用ldapjs的承诺 。 不幸的是,它仍然没有解决。 这次我尝试了蓝鸟,希望能得到一些好运。 // https://www.npmjs.com/package/ldapjs var Promise = require('bluebird'); var ldap = Promise.promisifyAll( require('ldapjs') ); var config = require('./config'); var print_r = require('print_r').print_r; var my_filter = "(&(objectCategory=person)(objectClass=user)" + "(cn=" + 'someone' + "))"; var ldap_username = config.ad.username; var ldap_password = config.ad.password; var ldap_url = config.ad.url; var ldap_dn_search = config.ad.dn_search; process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; ldap.Attribute.settings.guid_format […]

为什么'新Promise(…)'返回'undefined'?

看起来如果在用于创build一个promise的函数中没有引用'resolve'函数,那么promise就是未定义的。 在下面的代码中,… var count = 0; var limit = 3; // var thePromise; function timeout(_count) { thePromise.resolve(_count); } function sendMessage() { return new Promise(function(resolve, reject) { if (++count > limit) { reject({'Limit Exceeded': count}); } else { // With this line in place, the return value from this function // (expected to be a promise) […]