云南网站建设天软科技,网站开发量,百度一下首页登录入口,东莞最新一例阳性难点图解#xff1a;then#xff08;#xff09;方法 ES6学习网站#xff1a;ES6 入门教程 解决#xff1a;回调地狱#xff08;回调函数中嵌套回调#xff09;
两个特点#xff1a;
#xff08;1#xff09;对象的状态不受外界影响。Promise对象代表一个异步操作then方法 ES6学习网站ES6 入门教程 解决回调地狱回调函数中嵌套回调
两个特点
1对象的状态不受外界影响。Promise对象代表一个异步操作有三种状态pending进行中、fulfilled已成功和rejected已失败。只有异步操作的结果可以决定当前是哪一种状态任何其他操作都无法改变这个状态。
2一旦状态改变就不会再变任何时候都可以得到这个结果。Promise对象的状态改变只有两种可能从pending变为fulfilled和从pending变为rejected。只要这两种情况发生状态就凝固了不会再变了会一直保持这个结果这时就称为 resolved已定型。如果改变已经发生了你再对Promise对象添加回调函数也会立即得到这个结果。这与事件Event完全不同事件的特点是如果你错过了它再去监听是得不到结果的。
创建 Promise
你可以使用 new Promise() 构造函数来创建一个 Promise。它接受一个带有 resolve 和 reject 两个参数的函数这个函数会在异步操作完成成功或失败时被调用。 let myPromise new Promise((resolve, reject) { // 异步操作 setTimeout(() { let success true; if (success) { resolve(操作成功); // 成功时调用 resolve状态fulfill且改变当前promise对象的结果 } else { reject(操作失败); // 失败时调用 reject } }, 2000); // 模拟2秒延迟 }); Promise原型的方法
then()
p.then(value){console.log(value)},成功调用时执行,resolve()类似声明将形参传给then()方法
在then()方法的参数函数中,通过形参使用promise对象的结果
如果promise的状态不改变then()里的方法不会执行
使用return会将当前promise实例的状态改成fulfilled,return返回值将作为形参传给下一个then()
如果当前then()中代码出错会将promise实例的状态改成rejected catch()
catch(),失败调用时执行
何时触发reject(或者Promise执行体中有错
处理 Promise
使用 then() 方法来处理 Promise 对象的成功完成情况并使用 catch() 方法来处理失败情况。 myPromise.then((message) { console.log(成功:, message); // Promise 被 resolve 时执行 }).catch((error) { console.error(错误:, error); // Promise 被 reject 时执行 }); 上边说到Promise是一个构造函数new之后等于说调用了构造函数构造函数中传的参数是一个函数这个函数内的两个参数分别又是两个函数(reslove和reject) Promise 链
Promise 可以通过链式调用进一步简化处理多个异步操作的代码。在 then() 方法中返回一个新的 Promise对象状态为pending,可以使得链式调用变得更加清晰。 // 假设有一个函数 fetchUserData 返回一个 Promise用于获取用户数据 fetchUserData() .then((userData) { // 处理获取到的用户数据 return fetchUserPosts(userData.userId); // 返回另一个 Promise }) .then((userPosts) { // 处理获取到的用户发帖数据 }) .catch((error) { console.error(处理过程中出现错误:, error); }); Promise.all
Promise.all() 用于同时处理多个 Promise并在所有 Promise 都成功时返回一个包含所有结果的 Promise但只要有一个 Promise 失败它就会立即返回失败。 let promise1 someAsyncOperation(); let promise2 anotherAsyncOperation(); Promise.all([promise1, promise2]) .then((results) { // results 包含了两个 Promise 的结果 }) .catch((error) { // 处理失败情况 }); Promise.race Promise.race() 用于竞争多个 Promise返回一个新的 Promise其结果由最先完成的 Promise 决定 let promise1 fetchUserData(); let promise2 new Promise((resolve, reject) { setTimeout(() { reject(操作超时); }, 500); // 模拟超时操作 }); Promise.race([promise1, promise2]) .then((result) { // 处理最先完成的 Promise 的结果 }) .catch((error) { // 处理失败情况可能是超时或其他原因 });