Promise基础详细介绍(一),resolve,reject

本文介绍了JavaScript中的Promise对象,包括其基本用法(resolve和reject),状态转换(Pending、Resolved、Rejected),以及.then()和.catch()方法的应用。特别强调了Promise一旦状态改变,不会再次变化,且在Promise函数体内抛出的错误会被.catch()捕获。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Promise的含义
就是一个对象,用来传递异步操作的消息。

基本用法
resolve,reject是javascript引擎提供的。

  const promise = new Promise(function(resolve, reject) {
    const result = {
      success: true
      value: 777
    } //伪代码,比如接口返回的参数
    if(result.success) {
      resolve(result.value) // 供外部函数继续使用
    }else {
      // 失败就调用这里
      reject(error)  // 供外部函数继续使用
    }
  })

特点:
1.对象的状态不受外界影响
有3种状态,Pending(进行中),Resolved(已完成,又称Fulfilled),Rejected(已失败)
2.一旦状态改变就不会再回来。
最终状态只能以下2种
Pending ->Resolved
Pending ->Rejected

如果Promise状态已经变成Resolved,再抛出错误是无效的。

  const promise = new Promise(function(resolve, reject) {
    resolve('ok')
    throw new Error('test')
  })

  promise.then(function(value) {
    console.log(value)
  }).catch(function(error) {
    console.log(error)
  })
 
  // ok 说明:最后只接收到Ok

以上代码,用es6的箭头函数再写一次

  const promise = new Promise((resolve, reject) => {
    resolve('ok')
    throw new Error('test')
  })

  promise.then((value) => {
    console.log(value)
  }).catch((error) => {
    console.log(error)
  })

注意:**这样写能捕捉到错误,**但是不是改变Promise的状态,此时Promise的函数体已经运行结束,所以这个错误实在Promise函数体体外抛出的
加了setTimeout就不一样了

  const promise = new Promise(function(resolve, reject) {
    resolve('ok')
    setTimeout(() => {
      throw new Error('test')
    })
  })

  promise.then(function(value) {
    console.log(value)
  }).catch(function(error) {
    console.log(error)
  })
 
  // ok 
  // Uncaught Error: test 

说明:下一篇介绍then,catch, Promise.all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值