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

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

你可能感兴趣的:(前端,javascript,开发语言)