lOl*_*ive 6 javascript promise
在使用promises进行编码时,在一系列承诺中访问很久以前的数据是正确的模式是什么?
例如:
do_A.then(do_B).then(do_C).then(do_D).then(do_E_WithTheDataComingFrom_A_And_C_OnlyWhen_D_IsSuccesfullyCompleted)
Run Code Online (Sandbox Code Playgroud)
我目前的解决方案:通过链路传递单个JSON结构,并让每个步骤填充它.有什么意见吗?
是的,这是将状态与操作链接起来的正确方法。
链接.then语句非常常见,通常是我们在管道传输时的构建块。这是承诺的核心。
你所做的既正确又惯用。
为了好奇心,让我们展示一下这一点。
为了验证这一点 - 我们可以检查承诺规范。
我们想验证一下:
then它拒绝以相同原因返回的下一个承诺让我们使用规范按顺序验证这些- 特别是.then:
7.1 然后必须返回一个承诺[3.3]。
太好了,让我们验证一下它是否也与fulfillment相关
如果 onFulfilled 或 onRejected 返回值 x,则运行承诺解析过程 >[[Resolve]](promise2, x)。
太好了,所以我们知道当我们的 Promise 解决或拒绝时,我们的then处理程序就会使用适当的参数调用。所以.then(do_A).then(do_B)假设解决的话总是会起作用do_A。
7.四. 如果 onRejected 不是一个函数并且 Promise1 被拒绝,那么 Promise2 也必须以同样的原因被拒绝。
太好了,所以如果它在那里,它就会拒绝并调用onRejected,如果不存在,它就会被锁住。
then3.它拒绝以相同原因返回的下一个承诺我们刚刚在 2 中介绍了这一点。
那又是
如果 onFulfilled 或 onRejected 返回值 x,则运行承诺解析过程 [[Resolve]](promise2, x)。
因此,如果您设置 onFulfilled 它将运行解决过程。解决过程本身规定:
Promise 解析过程是一个抽象操作,以 Promise 和值作为输入,我们将其表示为 [[Resolve]](promise, x)。如果 x 是 thenable,它会尝试让 Promise 采用 x 的状态,假设 x 的行为至少有点像 Promise。否则,它会以 x 值履行承诺。
如果/当使用值 y 调用resolvePromise 时,运行 [[Resolve]](promise, y)。
其中 y 是 x 的返回值。
伟大的!所以它有效。
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |