说一说promise是什么与使用方法?
什么是 Promise?
Promise 是 JavaScript 中用于处理异步操作的结果对象。它表示一个可能尚未可用的值,但将在未来某个时间点被解析。Promise 可以处于三种状态之一:
如何使用 Promise?
以下是基本方法和概念:
创建 Promise
您可以使用 Promise 构造函数并传递一个回调函数来执行异步操作:
const promise = new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
resolve("操作已成功完成!");
}, 2000);
}); 链式 Promise
您可以使用 then() 方法将多个 Promise 链接起来,返回一个新的 Promise:
promise
.then((result) => {
console.log(result); // "操作已成功完成!"
return new Promise((resolve, reject) => {
// 另一个异步操作
setTimeout(() => {
resolve("另一个操作已完成!");
}, 2000);
});
})
.then((result) => {
console.log(result); // "另一个操作已完成!"
}); 处理错误
您可以使用 catch() 方法捕获错误,返回一个新的 Promise:
promise
.then((result) => {
console.log(result); // "操作已成功完成!"
throw new Error("发生错误!");
})
.catch((error) => {
console.error(error); // "发生错误!"
}); Promise.all() 和 Promise.race()
Promise.all() 接受一个 Promise 数组,并返回一个新的 Promise,该 Promise 在所有数组中的 Promise 都已解析时解析:
const promises = [promise1, promise2, promise3];
Promise.all(promises).then((results) => {
console.log(results); // [result1, result2, result3]
}); Promise.race() 接受一个 Promise 数组,并返回一个新的 Promise,该 Promise 在数组中的第一个 Promise 解析时解析:
const promises = [promise1, promise2, promise3];
Promise.race(promises).then((result) => {
console.log(result); // 第一个解析的 Promise 的结果
}); Async/Await
Async/await 是 Promise 的语法糖,使得编写异步代码变得更容易:
async function myFunction() {
try {
const result = await promise;
console.log(result); // "操作已成功完成!"
} catch (error) {
console.error(error); // "发生错误!"
}
} 这些是 Promise 在 JavaScript 中的基本概念。使用 Promise,您可以编写更易读和维护的异步代码。
得分点
pendding、rejected、resolved、微任务、then、catch、Promise.resolve()、Promise.reject()、Promise.all() Promise.any()、Promise.race()
参考答案
标准回答
Promise的作用:Promise是异步微任务,解决了异步多层嵌套回调的问题,让代码的可读性更高,更容易维护
Promise使用:Promise是ES6提供的一个构造函数,可以使用Promise构造函数new一个实例,Promise构造函数接收一个函数作为参数,这个函数有两个参数,分别是两个函数
resolve和reject,resolve将Promise的状态由等待变为成功,将异步操作的结果作为参数传递过去;reject则将状态由等待转变为失败,在异步操作失败时调用,将异步操作报出的错误作为参数传递过去。实例创建完成后,可以使用then方法分别指定成功或失败的回调函数,也可以使用catch捕获失败,then和catch最终返回的也是一个Promise,所以可以链式调用。Promise的特点:
对象的状态不受外界影响(Promise对象代表一个异步操作,有三种状态)。
其中pending为初始状态,fulfilled和rejected为结束状态(结束状态表示promise的生命周期已结束)。
一旦状态改变,就不会再变,任何时候都可以得到这个结果。
Promise对象的状态改变,只有两种可能(状态凝固了,就不会再变了,会一直保持这个结果):
resolve 方法的参数是then中回调函数的参数,reject 方法中的参数是catch中的参数
then 方法和 catch方法 只要不报错,返回的都是一个fullfilled状态的promise
加分回答
Promise的其他方法:
Promise.resolve() :返回的Promise对象状态为fulfilled,并且将该value传递给对应的then方法。
Promise.reject():返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法。
Promise.all():返回一个新的promise对象,该promise对象在参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。
Promise.any():接收一个Promise对象的集合,当其中的一个 promise 成功,就返回那个成功的promise的值。
Promise.race():当参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。
延伸阅读
Promise基本使用
const p1 = new Promise((reslove,reject)=>{ console.log(2); reslove(1) }).then((data)=>{ console.log(3); }).catch((data)=>{ console.log(3); }) // 2、3Promise状态一旦改变不能就不会再改变
const p2 = new Promise((reslove,reject)=>{ reslove('success') reject('error') }).then((result)=>{ console.log(result); }).catch((error)=>{ console.log(error); }) // successPromise的then接收两个参数,一个是处理resolved,另一个是处理rejected,返回值都是Fulfilled状态Promise
const p3 = new Promise((reslove,reject)=>{ reslove('success') }).then((result)=>{ console.log(result); },(error)=>{ console.log(error); }) // success const p4 = new Promise((reslove,reject)=>{ reject('error') }).then((result)=>{ console.log(result); },(error)=>{ console.log(error); }) // error const p5 = new Promise((reslove,reject)=>{ reject('error') }).then((result)=>{ console.log(result); },(error)=>{ console.log(error); }).catch((error)=>{ console.log(error); }) // 由于then里面处理了error,返回的是Fulfilled的Promise,所以不会走catch方法Promise的catch接收一个参数,用于处理error的函数,返回一个Fulfilled状态Promise
const p6 = new Promise((reslove,reject)=>{ reject('error') }).catch((error)=>{ console.log(error); }).then((result)=>{ console.log('1'); }) // error 1 // 由于catch返回的是Fulfilled状态Promise所以还会走then