1

我最近了解了Promises,它看起来类似于 SQL Transactions。

  • 交易全有或全无

  • Promise 是顺序回调

    它们是处理异步事件的同一概念的不同实现吗?

4

2 回答 2

3

Promise 是处理异步的一般概念。事务是更新多条记录时保证原子性的一种手段。

它们可能一起出现在某个库中,但它们不相关。如果您有一个具有异步 API 的事务性数据库,您可以一起看到它们。

于 2012-11-29T16:44:32.870 回答
1

意图:

Promise 提供了一个用于同步异步回调的高级接口

事务提供了执行依赖 SQL 语句的高级接口

用例

当应用程序需要一个未来值时,它会按需构造 Promise 并等待它返回。

当数据库需要执行一系列数据操作时,就会构造一个事务

错误处理

如果 Promise 引发异常,则返回异常并暂停未来

如果事务引发异常,则会对挂起的事务执行回滚

突变

如果没有异常,则在未来对象中返回计算值。

如果没有异常,则提交事务的最终结果集

副作用

在事务块中,您可以将查询写入多个数据库,但您必须先将事务提交或回滚到一个数据库,然后才能将查询写入另一个数据库。

将来,您可以为一个或多个全局或非局部变量赋值;没有提交或回滚

污染

在并发 SQL 事务的执行期间可能会发生读取。可能的读取操作包括:

  • 脏读,第二个 SQL 事务在第一个 SQL 事务执行 COMMIT 之前读取一行
  • 不可重复读取,其中一个 SQL 事务读取一行,然后第二个 SQL 事务修改或删除该行并执行 COMMIT;
  • phantom,其中一个 SQL 事务读取满足搜索条件的行,然后第二个 SQL 事务生成至少一个满足第一个事务的搜索条件的行,然后第一个事务重复搜索,从而产生不同的结果集。

在未来执行期间可能会发生分配或序列化,而不会发出警告

状态管理

设置保存点可以让您回滚事务的一部分。例如,如果您的事务包括插入、更新和删除,并且您在更新后设置了保存点,则可以回滚事务以排除删除。

未来没有保存点

参考

cftransaction
了解可用的事务隔离级别
JavaScript 中的异步编程与 Promises
事务复制的工作原理
事务进程同步
乐观算法
并发控制算法
配置可序列化隔离
使用新的注册表变量提高并发性
操作系统讲义:分配和死锁
SQLite 文件 I/O 规范
破碎的承诺–C++0x futures
concurrent.futures — 启动并行任务
Javascript 很棒:我不想要承诺
JavaScript 异步架构:事件与承诺
AS3 Promises - 指南和示例
Smalltalk 并发,玩转 Future
Promise-
Streams System.Threading.TTask.Future
Promises Part 5: The Lego Problem
Callbacks vs Events
Events and Callbacks
Events vs Callbacks – when to use what
coroutines,callbacks,message-queues - Tcl
Introduction to ES6 Promises – 你需要避免回调地狱的四个函数
所有关于 ES6 生成器
链接 ES6 Promisies 和 PEP3148 期货的差异

于 2014-08-28T22:19:28.163 回答