📜  JavaScript Promise

📅  最后修改于: 2020-10-26 03:33:30             🧑  作者: Mango

JavaScript Promise

现实生活中的承诺表达了两个或更多人之间的信任,并保证一定会发生某件事。在javascript中,Promise是一个对象,可确保将来(需要时)产生单个值。 javascript中的Promise用于管理和处理异步操作。

JavaScript Promise

到目前为止,我们了解了事件和用于处理数据的回调函数。但是,其范围是有限的。这是因为事件无法管理和操作异步操作。因此,Promise是有效处理异步操作的最简单,更好的方法。

Promise和事件处理程序之间可能存在两个差异:

  • 一个承诺永远不会失败或成功两次或更多次。这只能发生一次。
  • 承诺既不能从成功切换为失败,也不能从失败切换为成功。如果Promise已成功或失败,并且在某个时间之后,如果添加了任何成功/失败回调,则无论事件较早发生,都会调用正确的回调。

Promise术语

承诺可以处于以下状态之一:

  • 待定:待定的承诺尚未被拒绝或实现。
  • 已实现:相关的诺言动作已成功实现。
  • 被拒绝:相关的诺言行动未能实现。
  • 已解决:行动已完成或被拒绝。

因此,promise表示异步操作及其结果的完成。它可以是成功完成承诺,也可以是失败,但最终可以完成。 Promise使用then(),然后仅在promise解析完成后才执行。

Promise

JavaScript Promise承诺:

  • 除非js事件循环的当前执行未完成(成功或失败),否则将永远不会在其之前调用回调。
  • 即使使用then()的回调存在,但仅在完全执行异步操作后才会调用它们。
  • 如果可以通过多次调用then()来包含多个回调,则每个回调将按链执行,即按照插入顺序依次执行。

Promise方法

Promise的功能几乎可以在所有流行的Web浏览器上执行,例如Chrome,Mozilla,Opera等。方法列表为:

Method Name Summary
Promise.resolve(promise) This method returns promise only if promise.constructor==Promise.
Promise.resolve(thenable) Makes a new promise from thenable containing then().
Promise.resolve(obj) Makes a promise resolved for an object.
Promise.reject(obj) Makes a promise rejection for the object.
Promise.all(array) Makes a promise resolved when each item in an array is fulfilled or rejects when items in the array are not fulfilled.
Promise.race(array) If any item in the array is fulfilled as soon, it resolves the promise, or if any item is rejected as soon, it rejects the promise.

new Promise(function(resolve, reject){}); Here, resolve(thenable) denotes that the promise will be resolved with then().
Resolve(obj) denotes promise will be fulfilled with the object
Reject(obj) denotes promise rejected with the object.

Promise执行



Javascript Promise


在以上Promise实现中,Promise构造函数采用一个参数来回调函数。该回调函数有两个参数,即

  • 解析:成功执行诺言后,将调用resolve参数,该参数提供结果。
  • 拒绝:当拒绝承诺时,将拒绝参数被调用,从而导致错误。

这意味着将调用“解决”或“拒绝”。在这里,then()接受了一个参数,如果诺言得以解决,它将执行。否则,catch()将在拒绝promise时被调用。

使用Promises的优点

  • 处理异步操作的更好选择。
  • 提供简单的错误处理和更好的代码可读性。