首页 > 试题广场 >

说一说promise是什么与使用方法?

[问答题]

说一说promise是什么与使用方法?

推荐

得分点

pendding、rejected、resolved、微任务、then、catch、Promise.resolve()、Promise.reject()、Promise.all() Promise.any()、Promise.race()

参考答案

标准回答

Promise的作用:Promise是异步微任务,解决了异步多层嵌套回调的问题,让代码的可读性更高,更容易维护

Promise使用:Promise是ES6提供的一个构造函数,可以使用Promise构造函数new一个实例,Promise构造函数接收一个函数作为参数,这个函数有两个参数,分别是两个函数 resolverejectresolve将Promise的状态由等待变为成功,将异步操作的结果作为参数传递过去;reject则将状态由等待转变为失败,在异步操作失败时调用,将异步操作报出的错误作为参数传递过去。实例创建完成后,可以使用then方法分别指定成功或失败的回调函数,也可以使用catch捕获失败,then和catch最终返回的也是一个Promise,所以可以链式调用。

Promise的特点:

  1. 对象的状态不受外界影响(Promise对象代表一个异步操作,有三种状态)。

    • pending(执行中)
    • Resolved(成功,又称Fulfilled)
    • rejected(拒绝)

    其中pending为初始状态,fulfilled和rejected为结束状态(结束状态表示promise的生命周期已结束)。

  2. 一旦状态改变,就不会再变,任何时候都可以得到这个结果。

    Promise对象的状态改变,只有两种可能(状态凝固了,就不会再变了,会一直保持这个结果):

    • 从Pending变为Resolved
    • 从Pending变为Rejected
  3. resolve 方法的参数是then中回调函数的参数,reject 方法中的参数是catch中的参数

  4. 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、3

Promise状态一旦改变不能就不会再改变

const p2 = new  Promise((reslove,reject)=>{
    reslove('success')
    reject('error')
}).then((result)=>{
    console.log(result);
}).catch((error)=>{
    console.log(error);
})
// success

Promise的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
编辑于 2021-09-15 12:07:57 回复(0)
Promise是一个构造函数,是解决异步回调问题的新方案,可以解决回调地域的问题,让代码的可读性更高,更容易维护;使用方法:new一个Promise实例,传递一个参数,这个参数包含两个函数,第一个`resolve`将Promise的状态由等待变为成功,将异步操作的结果作为参数传递过去;第二个`reject`则将状态由等待转变为失败,在异步操作失败时调用,将异步操作报出的错误作为参数传递过去。Promise支持链式调用,可以调用他的then方法指定成功的回调,和失败的回调。也可以使用catch捕获失败。
发表于 2022-09-05 09:31:08 回复(0)

什么是 Promise?

Promise 是 JavaScript 中用于处理异步操作的结果对象。它表示一个可能尚未可用的值,但将在未来某个时间点被解析。Promise 可以处于三种状态之一:

  1. 待定:初始状态,操作尚未开始。
  2. 已完成:操作已成功完成,Promise 具有一个值。
  3. 已拒绝:操作已失败,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,您可以编写更易读和维护的异步代码。

编辑于 2024-04-25 12:10:43 回复(0)