有没有正确的方法来存储已解决的承诺?

Is there right way to store resolved promises?

现在几乎每个节点包都有回调api。如果我正在围绕它编写包装器,例如 ORM 怎么办:

const Promise = require('bluebird');
const mongo = Promise.promisifyAll(require('mongodb'));

class ORM {
  constructor(mongoUrl) {
    this.db = mongo.connectAsync(mongoUrl);
  }

  collection(name) {
    return this.db.then((db) => {
      return db.collectionAsync(name);
    });
  }
}

这是正确的方法吗?

好吧,promise 只是代表价值 + 时间的价值的代理。

你所做的一切都很好。 存储 promises 没问题, 事实上,通常 更好 存储 promises 而不是它们持有的值,因为这样你会得到更少的竞争条件.

您所做的唯一问题是错误处理。假设连接失败 - 在实际向数据库发出请求之前,您不会对其做出反应或检测到它,这没有太大意义。您应该决定如何处理构造函数中的连接失败并进行处理。

如果您想明确禁止检测到未处理的拒绝,您可以这样做:

this.db = mongo.connectAsync(mongoUrl);
this.db.catch(() => {}); 

虽然我个人不建议这样做,但您或许应该有重新连接逻辑,如果多次重新连接尝试失败,甚至可能使服务器崩溃。