再看ES6的Promise

in cn •  7 years ago 


(source pixabay)

之前在写 StellarBot 的时候,就一直被 Promise 给困扰着,毕竟自己不是专业前端。这次准备解决 StellarBotBUG 之前决定再次看看 ES6Promise

Promise 是一个对象,且有以下特点:

  1. 对象只有三个状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。
  2. 对象的状态不受外界影响,对象初始状态是 pending,终结状态是 fulfilled 或者 rejected。只有异步操作才能决定是从 pendingfulfilled,还是从 pendingrejected
  3. 一旦状态改变,就不会再变,任何时候都可以得到这个结果。

这次再看这些特点,终于找到了之前自己一直很晕的原因,就是忽略了对象只有一个状态,异步操作后也只有一个状态且不可变。

之前一直错误的以为 Promise 对象可以处理多个异步操作,靠的是链式的 then() 操作。

这个错误的思路把我带到沟里了很久。

这次明白了,一个 Promise 只处理一个异步操作,如果在 then() 中还要异步操作,就要再创建一个 Promise 才行。

明白了这个道理,再看 Promise 的各种示例代码,终于是看明白了,知道了这个流程到底是怎么走的了。

这下可以安心的去解决 StellarBot 的异步问题了。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

@ety001, 代码/编程/IT搞得很溜啊,陶醉本尊了,快扶我一下...

  ·  7 years ago 

promise 可以串起来吧, 我记得是 大概是 f().then().then()...catch()

我之前对于连续的then()并不理解。尤其是使用 stellar 官方封装的 js 库,在没有接触过 Promise 的情况下,使用 Promise 完成异步中再异步,就把我给弄晕了。

现在明白了,如果在一次异步完成后再进行异步,第二次异步需要重新new一个Promise对象出来并返回。之前不明白,是因为 Stellar 的 JS 库把这个过程封装进去了。

不知道我说明白了。。。😂

关注你啦,感觉 Promise 确实是javascript的一个难点呢

多谢关注。Promise我也是看了好久。