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

现在几乎每个节点包都有callbackAPI。 如果我正在编写包装器,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); }); } } 

这是正确的吗?

那么,承诺只是代表价值+时间的价值的代理。

你在做什么是完美的。 存储承诺是可以的事实上,存储承诺通常会更好 ,而不是存储的价值,因为这样你的竞争条件就less了很多。

你正在做的唯一的问题是error handling。 假设连接失败 – 你没有对它做出反应,或者直到实际上对数据库发出了一个没有太大意义的请求。 您应该决定如何在构造函数中处理连接失败并处理它。

如果你想明确地抑制未处理的拒绝,你可以这样做:

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

虽然我个人build议反对它,你也许应该重新连接逻辑,甚至可能会崩溃的服务器,如果多次重新连接尝试失败。