关于前端:通过现实生活中一个例子来理解-JavaScript-Promise

40次阅读

共计 921 个字符,预计需要花费 3 分钟才能阅读完成。

设想一下,你是一位顶级歌手,粉丝们日夜询问你行将到来的歌曲。

您承诺在它出版时将其发送给这些粉丝。歌手给粉丝提供一份名单。他们能够填写他们的电子邮件地址,这样当歌曲可用时,所有订阅方都会立刻收到它。即便呈现了十分大的问题,比方工作室产生火灾,导致歌曲无奈公布,他们依然会收到告诉。

这就是咱们在编程中常常遇到的事件的事实类比。

做某事并须要工夫的“生产代码”。例如,一些通过网络加载数据的代码。这就是“歌手”。

一个“生产代码”,冀望生产“生产代码”产生的后果。许多函数可能须要该后果。这些是“粉丝”。

Promise 是一个非凡的 JavaScript 对象,它将生产代码和生产代码链接在一起。依据咱们的类比:这是“订阅列表”。“生产代码”破费它须要的任何工夫来产生承诺的后果,并且“承诺”使该后果在筹备好时可供所有订阅的代码应用。

let promise = new Promise(function(resolve, reject) {// executor (the producing code, "singer")
});

传递给 new Promise 的函数称为 执行器。当新的 Promise 被创立时,executor 会主动运行。它蕴含最终应该产生后果的生产代码。依照下面的类比:执行者是“歌手”。

它的参数 resolve 和 reject 是 JavaScript 自身提供的回调。这是两个原生对象。

咱们的代码只在执行器外部。

当 executor 取得后果时,无论是早是晚,都没有关系,它应该调用以下回调之一:

  • resolve(value) — 如果作业胜利实现,带有后果值。
  • reject(error) — 如果产生谬误,error 是谬误对象。

总结一下:执行器主动运行并尝试执行一项工作。尝试实现后,如果胜利则调用 resolve,如果呈现谬误则调用 reject。

新的 Promise 构造函数返回的 Promise 对象具备以下外部属性:

  • state — 最后是“pending”,而后在调用 resolve 时更改为“fulfilled”,或者在调用 reject 时更改为“rejected”。
  • 后果 – 最后未定义,而后在调用 resolve(value) 时更改为 value,或者在调用 reject(error) 时更改为谬误。

正文完
 0