有没有正确的方式来存储解决的承诺?
现在几乎每个节点包都有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议反对它,你也许应该重新连接逻辑,甚至可能会崩溃的服务器,如果多次重新连接尝试失败。