美文网首页云计算
【React.js 22】async+await异步操作

【React.js 22】async+await异步操作

作者: IUVO | 来源:发表于2018-04-24 10:11 被阅读2041次

ES2017新增async语法,用一种很优雅的方式去实现了异步操作,具体讲解可以参照阮一峰大神的文章

以往的异步操作,都是使用callback的方式去实现,例如setTimeout()函数,一旦互相依赖的事件多了,这种方式就很容易造成callback hell,不易读,很不友好:

setTimeout(()=>{
  console.log(x)
  setTimeout(()=>{
    console.log(xx)
    setTimeout(()=>{
      console.log(xxx)
    },1)
  },1)
},1)

于是乎,又有了Promise对象,虽然在很大程度上让代码易读性提高了,但是一旦依赖多的时候还是免俗不了层层的.then:

axios.get('xxx/xxx').then(res=>{
  return x
}).then(res=>{
  return xx
}).then(res=>{
  .......//不断的嵌套
})

而ES2017新增async语法,就很好的优化了这一点:
比如在没有使用async语法的时候,我们写的异步函数是这样的:

export function readMsg(from){
  return (dispatch,getState)=>{
    axios.post('/user/readmsg',{from}).then(res=>{
      const userid = getState().user._id
      if (res.status == 200 && res.data.code == 0) {
        dispatch(messageRead(from,userid,res.data.num))
      }
    })
  }
}

我们换成async语法对比看看:

export function readMsg(from){
  return async (dispatch,getState)=>{
    const res = await axios.post('/user/readmsg',{from})
    const userid = getState().user._id
    if (res.status == 200 && res.data.code == 0) {
      dispatch(messageRead(from,userid,res.data.num))
    }
  }
}

这样一对比,看似修改的地方并不多,但是,实际上用的就是一种同步的书写方式,我们能看到,这种方式,隐式的执行了异步操作,使用await来做异步的等待,这样,无论你有几个互相依赖的异步要依次执行,都可以写的简单易懂:

const res = await axios.post('/user/readmsg',{from})
const res1 = await axios.post('/user/xxxxx')
const res2 = await axios.post('/user/yyyyy')
console.log(res,res1,res2)//会等到所有的异步都执行完再执行

值得注意的是,asyncawait必须要一起使用。

有了这么方便的语法,以后的异步函数,我觉得可以尽可能的用它来实现。

相关文章

  • 【React.js 22】async+await异步操作

    ES2017新增async语法,用一种很优雅的方式去实现了异步操作,具体讲解可以参照阮一峰大神的文章。 以往的异步...

  • async+await优雅处理异步

    同步与异步 1.同步 一次只能执行一个任务,函数调用后需等到函数执行结束,返回执行的结果,才能进行下一个任务。如果...

  • React.js 小书 Lesson21 - ref 和 Rea

    React.js 小书 Lesson21 - ref 和 React.js 中的 DOM 操作 本文作者:胡子大哈...

  • ES6 Primise异步编程

    异步操作流程化的手段 #Promise处理异步操作 Promise,使异步操作变得流程化的手段之一,例如“异步A ...

  • Promise--异步的解决方案

    Promise 对象是 JavaScript 的异步操作解决方案,为异步操作提供统一接口,使得异步操作具备同步操作...

  • .NET多线程(五)异步操作

    5、异步操作 5.1 异步操作基础 异步操作发展历史,APM模式,EAP模式,TPL模式 .NET 1.0 Sys...

  • Future

    juc.Future:Java异步操作结果 Future:Netty异步操作结果 Promise:可设置结果的异步...

  • Android AsyncTask基础

    AsyncTask是Android为了简化异步操作而封装的异步任务操作抽象类。当我们需要在程序中执行耗时的异步操作...

  • IOS多线程总结

    目录 简述 NSThread GCD操作与队列异步操作并行队列同步操作并行队列同步操作串行队列异步操作串行队列队列...

  • 异步编程方法

    前言 同步与异步最直观的理解:等到操作执行完成才返回执行结果的是同步操作;反之,则是异步操作 传统的异步编程方法:...

网友评论

    本文标题:【React.js 22】async+await异步操作

    本文链接:https://www.haomeiwen.com/subject/idudlftx.html