我刚接触Node.js应用程序中使用的异步计算的延续传递风格,并且正在努力掌握一些相当基本的代码。
我正在尝试编写一个库,它将创建一个到imap.gmail.com的imap接口,并且我正试图在BDD之后加上'vows'.js‘(成功的程度各不相同。我肯定没有遵循我应该遵循的完整的红色->代码->绿色循环,但很难以这种方式开始使用一种语言)。
相关的测试用例如下所示:
var gmail = require('../lib/gmail.js'),
vows = require('vows'),
assert = require('assert'),
fs = require('fs');
vows.describe('Basic interface tests').addBatch({
'A GMailInterface object can': {
topic: function() {
var gm = Object.create(gmail.GMailInterface);
var settings_file = 'test/test_settings.json';
var settings = JSON.parse(fs.readFileSync(settings_file));
var that = this;
gm.connect(settings.email,settings.password,function() {
that.callback(gm); // ERROR BEING GENERATED HERE
});
},
// ACTUAL VOWS OMITTED - the following is just a test of the callback
'find an email' : {
topic: function(gm) {
console.log(">>>",gm);
},
}
}
}).export(module)如果我在行的正上方写一条console.log消息,上面写着"ERROR it HERE",它将打印出来。如果我在它下面放一条消息,它就不会。测试的输出显示以下错误:
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Uncaught, unspecified 'error' event.
at EventEmitter.<anonymous> (events.js:50:15)
at EventEmitter.emit (/Users/eblume/Repositories/my_stuff/gmail/node_modules/vows/lib/vows.js:236:24)
at /Users/eblume/Repositories/my_stuff/gmail/node_modules/vows/lib/vows/context.js:31:52
at Object.callback (/Users/eblume/Repositories/my_stuff/gmail/node_modules/vows/lib/vows/context.js:46:29)
at Array.0 (/Users/eblume/Repositories/my_stuff/gmail/test/gmail_test.js:17:14)
at EventEmitter._tickCallback (node.js:192:40)gmail.js中的代码有点太多了,不能在这里发表,但这里是我认为的相关部分-如果你在下面提出问题,我可以发表更多。
gm.connect = function(username,password,cb) {
var self = this;
self.conn = new ImapConnection({
username: username,
password: password,
host: 'imap.gmail.com',
port: 993,
secure: true
});
async.series([
function(callback){self.conn.connect(callback); },
function(callback){self.conn.openBox('[Gmail]/All Mail',true,callback);}
],
function(err,results) {
if (err) {
die(err);
}
process.nextTick(cb);
});
};我可能会错在哪里?谢谢你的帮助!
发布于 2012-05-01 07:55:26
我建议阅读一下“这”是如何工作的。如果没有人弄乱它,that.callback的“that”指的是父对象,它用一个文字字符串标记为“A GMailInterface object can”。
我怀疑是这个因素把你绊倒了。“‘callback”应该被定义为与“topic”方法具有相同对象的方法,就像你设置东西的方式一样,而这并不是我所认为的它的工作方式。
默认情况下,“‘this”通常是指最近的祖先/父对象。它忽略包装函数,除非它们被用作使用'new‘关键字的构造函数,在这种情况下,它指示对象实例。在DOM中的事件回调的情况下(浏览器JS -不是node.js,我不太了解事件),它通常指的是在其上触发了事件的对象。
没有真正的杂乱无章是由那个和自我修复的。我们只是倾向于使用这些来确保在对象具有聚合对象的情况下我们正在寻址顶级对象。
https://stackoverflow.com/questions/10391814
复制相似问题