【发布时间】:2015-08-19 21:33:51
【问题描述】:
我在 co.wrap 中定义了一个 Promises,但它抛出 TypeError: undefined is not a function(错误行是 yield pm2.connect();)
app.js:
var app = koa();
app.init = co.wrap(function *(overwriteDB) {
yield pm2.connect();
koaConfig(app);
app.server = app.listen(config.app.port);
if (config.app.env !== 'test') {
console.log('PM2 monitor listening on port ' + config.app.port);
}
});
}
if (!module.parent) {
app.init().catch(function (err) {
console.error(err.stack);
process.exit(1);
});
}
在pm2.js中,我封装了一个返回Promise的函数,代码如下:
var _ = PM2.prototype;
exports = module.exports = PM2;
function PM2() {
debug("PM2");
if (!(this instanceof PM2)) return new PM2;
this.env = process.env.NODE_ENV || 'development';
};
_.connect = function() {
debug('connect');
return new Promise(function(resolve, reject) {
pm2.connect(function(err) {
if (err) reject(err);
resolve();
});
});
那我试试
co(function *() {
yield pm2.connect();
var res = yield pm2.list();
console.log(res);
});
在 app.js 中,它工作正常。
【问题讨论】:
-
pm2是什么,你从哪里得到的?这两个pm2s 您使用的是不同的对象吗?其中一个似乎没有兑现承诺 -
@Bergi,这两个 pm2 是同一个对象 function PM2,我将代码推送到:github.com/zwb-ict/pm2-monitor。您可以结帐进行测试。谢谢。
-
你不应该从你的 pm2 模块中导出一个构造函数,而是一个带有一些与原始 pm2 匹配的 promise-returning 方法的单例对象。如果是我,我什至不会费心创建 pm2 包装器;只需使用类似npmjs.com/package/ugly-adapter
-
谢谢@greim,我发现我没有得到Object PM2(),我改成require('./lib/pm2')();我工作正常。我会尝试丑陋的适配器
-
JavaScript 在变量名中区分大小写。
标签: javascript node.js promise es6-promise co