当客户完成结帐时,将发生以下三个操作。 (用node.js编写)
问题是我不知道如何确保以上所有三个操作均成功,否则所有操作都将失败。我不希望发生的事情是其中一些成功而其他失败。 PostgreSQL(atomicity)支持此属性。但是,其他两个操作似乎不支持这种属性。
try {
...
await chargeCustomer();
await sendMail();
await db.commit(); // add a new "order" record to the database
} catch (err) {
await db.rollback();
}
如您所见,如果“ chargeCustomer()”失败,则不会有任何问题,因为数据库可以“回滚”。但是,如果它在“ sendMail()”处失败,我将无法回滚“ chargeCustomer()”,因为它不支持这种操作。
典型的电子商务网站如何处理这种情况?