我正在尝试从 MySQL 数据库中异步提取数据,然后使用 Q Promise 处理结果(有史以来第一次尝试)。我正在使用此处列出的 Q defer() 函数。我创建了一个 "wrapper" 对象,我最终将附加到 req.db 或通过来自 com.db 的循环依赖项访问(当前使用方式),以允许在我的应用程序中使用 api。
节点抛出指向 .then 回调的错误:
2 3 | ^ TypeError: Cannot call method 'then' of undefined |
我尝试了以下方法:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | function Base() { this.results = []; this.query = 'query here'; this.go = function() { com.pool.getConnection(function(err, con) { if (err) throw err; /* THIS WORKS FINE (with callbacks) con.query('SELECT * FROM Users', function(err, rows){ if (err) throw err; if (rows){ for (var i = 0; i < rows.length; i++){ this.results.push(rows[i]); //console.log(rows[i]); } } con.release(); return this.results; }.bind(this)); */ var defer = com.Q.defer(); con.query('SELECT * FROM Users', defer.makeNodeResolver()); return defer.promise(); }.bind(this)); } } function DB() { this.getAllUsers = function() { this.query = 'SELECT * FROM Users'; this.go().then(function(stuff) { console.log(stuff); }, function(err) { console.log(err); }); } } DB.prototype = new Base(); module.exports = DB; |
com 对象存在于主应用程序中,它包含所有常见的 require 模块。
我也试过了(好像错多了):
2 3 4 5 6 7 8 9 10 11 12 13 14 15 | com.pool.getConnection(function(err, con) { if (err) this.deferred.reject(new Error(err)); con.query('SELECT * FROM Users', function(err, rows) { if (err) throw err; if (rows) { this.deferred.resolve(rows); } con.release(); return this.deferred.promise.done; }.bind(this)); com.Q.nfcall(this.go()).then... |
我找到了几篇关于像这样将 Q 适配到节点的文章。
应该这样做("应该",因为我无法用 MySQL 测试它)
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function DB(pool) { this.asyncQuery = function(sql) { return function () { var result = Q.defer(), paramsArray = [].slice.call(arguments); pool.getConnection(function(err, con) { if (err) return result.thenReject(err); con.query(sql, paramsArray, result.makeNodeResolver()); result.promise.finally(function () { con.release(); }); }); return result.promise; }; }; this.getAllUsers = this.asyncQuery('SELECT * FROM Users'); this.getUserByName = this.asyncQuery('SELECT * FROM Users WHERE name = ?'); } module.exports = DB; |
用法:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var com = require('./mainRebuild'); var db = new DB(com.pool); db.getAllUsers().then(function (users) { console.log(users); }); db.getUserByName('JohnDoe').then(function (user) { console.log(user); }); var customQuery = db.asyncQuery('SELECT * FROM foo WHERE id = ?'); customQuery(42).then(function (result) { console.log(result); }); |
似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
Ruby初学者努力简单地将这个@@people散列的值打印到控制台classPerson#haveafirst_nameandlast_nameattributewithpublicaccessorsattr_accessor:first_nameattr_accessor:last_name#haveaclassattributecalled`people`thatholdsanarrayofobjects@@people=[]#havean`initialize`methodtoinitializeeachinstancedefinitialize(first_name,last_
我是程序员的新手,请原谅我的新手。所以我正在使用Nokogiri来抓取警方的犯罪记录。这是下面的代码:require'rubygems'require'nokogiri'require'open-uri'url="http://www.sfsu.edu/~upd/crimelog/index.html"doc=Nokogiri::HTML(open(url))putsdoc.at_css("title").textdoc.css(".brief").eachdo|brief|putsbrief.at_css("h3").textend我使用选择器小工具书签来查找日志(.brief)的C
我的Ruby-on-Rails项目中有以下文件结构,用于规范:/spec/msd/serviceservice_spec.rb/support/my_modulerequests_stubs.rb我的request_stubs.rb有:moduleMyModule::RequestsStubsmodule_functiondeflist_clientsurl="dummysite.com/clients"stub_request(:get,url).to_return(status:200,body:"clientsbody")endend在我的service_spec.rb我有:re
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan