Tag: 推迟

node.js推迟了误解

我正在学习q.js并试图同时查询3个集合(避免callback地狱): var Q = require('q') var deferred = Q.defer(); users()是db.collection.find()的包装器 var users = function (){ Auth.listUsers({role:'user'}, call) return deferred.promise } call()是导出promise的简写 var call = function (err,data){ if (err) { deferred.reject(err); } else { deferred.resolve(data); } } loop()是主循环,它获取游标并循环通过条目 var loop = function (result) { var list = [] var promises = []; result.each(function (err,data){ if (err) […]

在parsing之前返回的延迟对象

我正在使用带有Node js的库。 我创build一个被caching的对象,把这个parsing放到一个封装的Mongoose findOne()函数中,然后在外面返回promise。 但似乎我的承诺总是在数据被检索之前返回。 User.prototype.getProfile = function(criteria) { var deferred = when.defer(); var options = { criteria: criteria, select: 'name id email' }; this.User.load(options, function(err, data) { if (data) { this.name = data.name; this.email = data.email; this.id = data.id; } else { return false; } console.log(data); deferred.resolve(); }); console.log('returning promise'); return deferred.promise; }; 呼叫者 […]

mongoose和Q承诺

我正在从这里的mongoose / q promises框架样例开始工作 ,但在尝试使用findOne时似乎遇到了nfbind的一些问题,主要是因为Q框架中的样本似乎不符合要点。 我的代码: var mongoose = require('mongoose'); var Q = require('q'); var user_schema = mongoose.Schema({username:String, last_touched:Date, app_ids:[String]}); var user = mongoose.model('user', user_schema); exports.user = user; exports.user.find = Q.nfbind(user.find); exports.user.findOne = Q.nfbind(user.findOne); 如果我调用user.findOne({username:'test'}).then(function(err, user) { … } ,用户总是未定义。如果我删除导出并使用callback的非诺言版本,我得到了用户,我错过了一些特殊的魔法,但是在看了代码实现之后,来自Q github和mongoose演示的例子…没有什么真正跳出来的。用Q做一个findOne工作? 我也尝试在源代码中而不是在模块中设置nfbind函数,但无济于事。

在Node.js上,Q延迟是如此之慢?

所以我在Node.js中创build了这个简单的testing服务器 每当我做出直接的回应,我就会得到2200个请求/秒(快!)。 当我只包装一个简单的Q时,它会下降到580个请求/秒( 慢4倍 !)。 有人可以解释这个巨大的差异吗? // Requires var server = require('http'); var q = require('q'); // Start server var http = require('http'); http.createServer(function(request, response) { // Comment out either of two below sections // Without deferred // 2200 reqs/second response.writeHead(200, {"Content-Type": "text/html"}); response.write("test"); response.end(); // Q deferred // 580 reqs/second var deferred = q.defer(); […]

如何避免在条件expression式中的coffeescript隐式“返回”?

我正在实现一个函数具有延迟值返回,并在函数内我有很多嵌套的条件expression式: 例如: deferred = Q.defer() FS.readFile("foo.txt", "utf-8", (error, text) -> if error deferred.reject(new Error(error)) else deferred.resolve(text) ) return deferred.promise 比将编译成: var deferred; deferred = Q.defer(); FS.readFile("foo.txt", "utf-8", function(error, text) { if (error) { –> return <– deferred.reject(new Error(error)); } else { –> return <– deferred.resolve(text); } }); return deferred.promise; 我只需要最后一个返回,但不是if / else返回(即– >返回< –在编译的代码中) 我怎样才能避免coffeescript编译器这样的行为(不需要隐式返回)?

JavaScript承诺不传递所有参数(使用Q)

我无法通过所有参数。 我的承诺callback只接收一个而不是三个: var asyncFunction= function(resolve) { setTimeout(function() { resolve("Some string that is passed", "and another", "third"); }, 1000); }; var promiseFunction = function () { var deferred = Q.defer(); asyncFunction(deferred.resolve); return deferred.promise; }; promiseFunction().then(function() { // Only one argument is passed here instead of 3 // { '0': 'Some string that is passed' } console.log(arguments); […]