Tag: q

用下划线地图做一些asynchronous的事情

function addSomething(data) { var defer = q.defer(); data = _.map(data, function(item) { item['something'] = callSomethingAsync(); return item; }); return defer.promise; } 我如何处理这个问题。 我发现的唯一方法是使用Async.js。 但也许有一个更好的方式使用$ q? 编辑: function getScopes(item) { var defer = q.defer(); var query = "SELECT somevalue FROM Something WHERE ID = '" + item.id + "'"; mysql.query(query, function(err, data) { if (err) { […]

Node.js使用Q :: Q.ninvoke链承诺

我试图缩小与我的node.js服务器有关的内存问题的潜在原因。 我一直感到有点不舒服的一部分代码是我使用Q的承诺。 以下是我的基本结构: var Q = require('q'); MyClass.prototype.doSomething = function(somedata, callback) { var res = [];// will contain the results of each function call Q.ninvoke(this, 'doSomethingElse', 'hello!') .then((function(result){ res.push(result); return Q.ninvoke(this.someobject, 'someFunction', somedata); }).bind(this)) .then((function(result){ res.push(result); callback(null, res);// Returns both result objects, in an array }).bind(this)) .fail(callback) .done(); } 这看起来合乎逻辑吗? 如果doSomethingElse函数也使用promise,该怎么办? 这里的一切都是正确的吗?

是否有像node.js中的延迟(Q)监视器?

我希望看到所有未解决的状态(如果可能的话,所有的延迟日志:初始化,未解决,已解决/拒绝状态)。 有没有什么机制呢? 例如: Q.getAllDeferreds()或Q.getLog()

node.js&promise:常见的做法?

我是node.js新手,现在正在设置环境,select使用哪些模块等等。在我的研究中,我发现了Q模块 – 我真的很欣赏,因为代码的简单性和结构本身。 我开始寻找关于使用node.js的承诺的利弊的讨论。 但不幸的是,我找不到很多信息。 现在我问自己为什么。 你build议使用node.js promises吗? 还是有什么已知的缺点,可能会阻止我使用它?

使用Firebase返回数组

尝试查找使用Firebase .on("child_added")时使用Q库(或任何类似的库,我不是部分)在Node.js中返回数据数组的最佳用法示例。 我尝试过使用Q.all()但它似乎从来没有等待承诺之前填写返回。 这是我现在的例子: function getIndex() { var deferred = q.defer(); deferred.resolve(new FirebaseIndex( Firebase.child('users').child(user.app_user_id).child('posts'), Firebase.child('posts') ) ); return deferred.promise; } function getPost( post ) { var deferred = q.defer(); deferred.resolve(post.val()); return deferred.promise; } function getPosts() { var promises = []; getIndex().then( function (posts) { posts.on( 'child_added', function (_post) { promises.push( getPost(_post) ); }); }); return […]

如何在使用node.js Q链执行期间插入promise?

我有一个承诺链,请求一个RSS URL,parsing它的链接,然后需要请求每个链接。 第一部分很好。 然而,我有问题的工作如何“插入承诺”,要求每个链接已被parsing。 我开始通过生成一个简单的链接url(首选的方法),但无法做到这一点。 代码现在生成一个promise数组请求每个URL,但我不知道如何使这个工作。 也许我需要使用Q.all(),但似乎是预定义的function? requestRss(rssSourceUrl) .then(function(links) { // ??? }) .catch(function(error) { console.log(error); }) .done(); function requestRss(url) { var deferred = q.defer(); request(url, function(err, resp, body) { if (err || resp.statusCode !== 200) { deferred.reject(new Error(resp.statusCode + ' ' + err + ' ' + body)); } else { $ = cheerio.load(body); […]

如何在Q.then()callback中传播嵌套错误

我觉得这应该很容易,但我一直在挣扎一段时间。 我有看起来像这样的代码(显然这是一个简化的例子)。 getPromise(param1, param2) .then(function (results) { // do something that causes an error: var err1 = new Error() throw err1; }) .then(function (results) { getAnotherPromise(param1) .then(function (res) { // do something else that might cause an error: var err2 = new Error() throw err2; }) }) .then(function (results) { // deal with the results […]

Q promises – 数组中每个元素的Node.js函数

函数dirList()应该返回definded目录内的文件夹数组。 我不明白如何返回dirListvariables只有在函数isDir()执行每个文件。 我想我应该使用Q.all() ,但我不知道我应该把它放在:-( var fs = require('fs'), Q = require('q'), readdir = Q.denodeify(fs.readdir); function isDir(path) { return Q.nfcall(fs.stat, __dirname + path) .then(function (stats) { if (stats.isDirectory()) { return true; } else { return false; } }); } function dirList(path) { return readdir(__dirname + path).then(function (files) { var dirList = files.filter(function (file) { return isDir(path […]

Q承诺不起作用,减lessfunction

我试图返回最早修改date的目录中的文件。 这种方法似乎在createFileDateMap函数中失败。 我想减less一个文件path的数组,并创build一个文件名和MODdate的对象。 getModDate函数是一个asynchronous的fs.lstat调用。 我似乎无法设置我的reducer的acc从.then()块内的值。 当值取决于asynchronous调用时,我不确定如何实现减less var _ = require('lodash'), fs = require('fs'), path = require('path'), Q = require('q'); function checkDir(dir) { // Check if given path is valid directory var deferred = Q.defer(); fs.lstat(dir, deferred.makeNodeResolver()); return deferred.promise.invoke('isDirectory'); } function getFiles(dir) { // Get all files within a directory var deferred = Q.defer(); fs.readdir(dir, deferred.makeNodeResolver()); […]

我怎样才能用“Q`与mongoose绑定`save`方法

说我在User.js有以下模式 var mongoose = require('mongoose'); var Q = require('q'); var userSchema = new mongoose.Schema({ phone: { type: Number, require: true, index: { unique: true } } }); module.exports = mongoose.model('User', userSchema); module.exports.findOne = Q.nfbind(module.exports.findOne.bind(module.exports)); module.exports.find = Q.nfbind(module.exports.find.bind(module.exports)); 另一个文件testuser.js var mongoose = require('mongoose'); var Q = require('q'); var User = require('../User'); var connectionStr = "mongodb://localhost:27017/user-model-test"; mongoose.connect(connectionStr, […]