我有一个简单的小程序,它将两个函数定义为变量。这些函数都返回RSVP Promises,以便它们可以像我在下面所做的那样链接在一起。我经常使用这种模式,但在这种情况下我会陷入疯狂......
var opChown = function() { ... };
var opChgrp = function() { ... };
debug('chown: ' + opChown);
debug('chgrp: ' + opChgrp);
// Chain permission operations
opChown()
.then(opChgrp())
.then(function() {
debug('resolving parent promise');
resolve();
})
.catch(function(err) {
debug('rejecting parent promise');
reject(err);
}
);
虽然我的调试语句清楚地表明这两个函数实际上是定义的,但当我执行它们时,我得到一个未处理的异常:
类型错误:未定义不是函数
请帮助我失去理智。欢迎任何和所有建议。
对于一些额外的上下文,这里是 的定义opChown
:
var opChown = function() {
return new RSVP.promise(function(resolve,reject) {
debug('opChown');
if(options.ignoreChown) {
resolve();
} else {
var chown = shell('chown',['-R', downgradedUser, destDir]);
debug('chown command executed; user permission is "%s"', downgradedUser);
chown.on('exit',function(code) {
if(code !== 0) {
var errMessage = 'Build [' + code + ']:' + ' problems changing ownership on "' + destDir + '" directory to ' + downgradedUser + '.';
debug('Problem with chown: %s', code);
reject({operation:'chown', message: errMessage});
} else {
console.log(' - %s executed, user permissions changed to %s', chalk.bold('chown'), chalk.bold(downgradedUser));
resolve();
}
}); // end chown
}
});
}; // end opChgOwn
现在基于@bergi 的大指针,我确实可以在 Node 的 'uncaughtException' 事件中使用堆栈跟踪,这里是堆栈跟踪,它清楚地指出问题出在opChown
函数内部而不是函数本身:
TypeError: undefined is not a function
at opChown (/lib/broccoli-watcher.js:117:13)
at ChildProcess.<anonymous> (/lib/broccoli-watcher.js:167:5)
at ChildProcess.emit (events.js:98:17)
at Process.ChildProcess._handle.onexit (child_process.js:809:12)