Promise
Promise
概述
1 | // 延迟2s输出1,完了之后延迟1s输出2,完了之后之后延迟1s输出3 |
我们发现这几个setTimeout
函数不是串行执行的,而是并行进行的。
- 同步代码:串行执行,前面的代码先执行,后面的代码后执行。
- 异步代码:并行执行,同时开始执行,后面的代码不会等待前面的代码执行完毕再执行。
正确写法:嵌套递归的写法
1 | setTimeout(() => { |
js把这个现象叫做回调地狱即回调函数的嵌套
Promise
是一个类,用来包装异步操作,根据异步操作的结果,是成功还是失败,进而决定Promise
是成功还是失败;Promise
支持链式调用,从而消除回调地狱。
Promise 是一种用于处理异步操作的对象。它代表了一个最终可能完成(并传递一个结果值)或失败(并传递一个原因)的异步操作。Promise 允许你为异步操作的成功和失败分别指定处理函数(handlers),并且可以在这些操作完成时得到相应的通知。
基本用法
创建一个 Promise 的基本方式是使用 new Promise(executor)
构造函数,其中 executor
是一个接收两个函数的函数:resolve
和 reject
。这两个函数由 JavaScript 引擎提供,分别用于在异步操作成功时和失败时调用。两个函数不可能会同时执行,要么成功,要么失败。
Promise 有三种状态:
- Pending(等待):初始状态,既不是成功,也不是失败状态。
- Fulfilled(已兑现):意味着操作成功完成。
- Rejected(已拒绝):意味着操作失败。
一旦 Promise 被兑现(fulfilled)或拒绝(rejected),它的状态就不能再改变。
1 | let promise = new Promise(function(resolve, reject) { |
链式调用
Promise
的一个关键特性是支持链式调用chaining
。每个 then
方法可以返回一个新的 Promise
,从而可以基于这个返回值继续链式调用。
1 | function delay(duration, n) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 MyAKDreamのBlog!