再看ES6的Promise

in #cn6 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 的异步问题了。

Sort:  

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

新年快乐!cn区点赞机器人 @cnbuddy 这厢有礼了。倘若你想让我隐形,请回复“取消”。

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

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

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

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

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

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

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.030
BTC 58559.96
ETH 3156.41
USDT 1.00
SBD 2.44