通过一个函数来解析promise,返回promise——仅限在异步组件Suspense的子组件中使用;当前组件中使用不了这个数据;

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过一个函数来解析promise,返回promise——仅限在异步组件Suspense的子组件中使用;当前组件中使用不了这个数据;相关的知识,希望对你有一定的参考价值。

创建一个解析promise中的数据的函数,仿promise的3个状态


场景:
一般来说这时候的赋值方式就是这样的,加载加载状态中.then来获取数据,设置数据,那么我有什么办法将promise数据直接给赋值为初始化。

返回一个promise
const fentchMsg =async ()=>
    let users = await (await fetch("mock/users.json")).json();
    return users;


let [data,setData] = useState([])
useEffect(()=>
	fentchMsg().then(ret=>
	     console.log(ret);
	     setData(ret);
	 )

创建一个用于解析promise中的数据 仿promise的3个状态给一个函数,将得到的promise传入进去:
  • 定义一个promise的状态
  • result它就是promise解析出来的数据接受的变量
  • promise执行成功的,返回成功的状态,并把数据赋值给result
  • 如果错误把状态修改为失败,并把错误赋值给result
  • 返回一个对象,对象中的方法真正能实现对promise的数据的收集,才是把数据弄到

// 网络请求
// 返回值为  Promise
const fetchUser = async () => 
  let ret = await (await fetch('mock/users.json')).json()
  return ret


// 创建一个用于解析promise中的数据 防promise的3个状态
const wrapperPromise = promise => 
  // 定义一个promise的状态
  let status = 'pending'
  // 它就是promise解析出来的数据接受的变量
  let result
  const callbackPromise = promise.then(
    ret => 
      // promise执行成功的,返回成功的状态,并把数据赋值给result
      status = 'success'
      result = ret
    ,
    err => 
      // 把状态修改为失败,并把错误赋值给result
      status = 'error'
      result = err
    
  )

  return 
    // 此方法中,才是把数据弄到
    read() 
      if (status === 'pending') 
        // 抛一个异常,这样它就会再来执行,此时就会有上一次的结果
        throw callbackPromise
       else if (status === 'success') 
        return result
       else if (status === 'error') 
        return result
      
    
  



let [data, setData] = useState(wrapperPromise(fetchUser()))


以上是关于通过一个函数来解析promise,返回promise——仅限在异步组件Suspense的子组件中使用;当前组件中使用不了这个数据;的主要内容,如果未能解决你的问题,请参考以下文章

JS ~ Promise.reject()

promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解

async 与 promise 的区别

简单理解JavaScript 的async/await

为啥没有通过在 promise 中调用的函数内部的闭包来定义解析?

ES6新特性:Javascript中内置的延迟对象Promise