【问题标题】:co.wrap yield Promise throw TypeError: undefined is not a functionco.wrap yield Promise throw TypeError: undefined is not a function
【发布时间】: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


【解决方案1】:

我忘记了()

require('./lib/pm2')(); 

【讨论】:

    猜你喜欢
    • 2020-10-06
    • 2015-06-24
    • 2021-06-21
    • 1970-01-01
    • 2019-02-24
    • 2015-05-01
    • 2014-08-15
    • 2015-01-14
    • 2014-07-06
    相关资源
    最近更新 更多