等待在Node.js中实现的承诺

时间:2018-06-17 14:31:16

标签: javascript node.js async-await

我正在使用用户证书的Node.js项目。我需要以阻塞方式同步生成它们,但我使用的库(pem)只有异步函数(回调)。我尝试了多种方法来解决这个问题,但我的尝试都没有成功。我的代码如下所示:



function KeyObject(CN, serverKey, days = 365) { // key object
  if (typeof CN !== 'string' ||
    typeof days !== 'number' ||
    typeof serverKey !== 'object') {
    throw TypeError;
  }
  this.CN = CN;
  this.days = days;
  const _this = this;

  async function generatePrivate() {
    var p = new Promise((resolve, reject) => {
      pem.createPrivateKey((err, obj) => {
        if (err) reject(err);
        _this.private = obj.key;
        resolve();
      });
    });
    await p;
  }

  async function generateCert(serviceKey) {
    if (typeof serviceKey !== 'object') {
      throw TypeError;
    }
    var p = new Promise((resolve, reject) => {
      pem.createCertificate({
        commonName: _this.CN,
        days: _this.days,
        serviceKey: serviceKey.private
      }, (err, obj) => {
        if (err) reject(err);
        _this.cert = obj.certificate;
        resolve();
      });
    });
    await p;
  }
  // init the keys
  generatePrivate();
  generateCert(serverKey);
}




此代码直接执行,并且不会等待函数完成。我该怎么办? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您应该从这些功能中返回Promise - 不需要await或者async。您也不能拥有async构造函数,也许添加异步工厂也可以。

相关问题