美文网首页
ECMAScript之Async

ECMAScript之Async

作者: 锋叔 | 来源:发表于2018-07-06 17:46 被阅读0次

    async是什么?干什么用的?

    async函数是ES2017让异步操作变得更简单的方法。

    async怎么使用?

    // PS:async和promise联合使用更容易理解
    // 获取价格
    function getPrice(ms){
      return new Promise( resolve => {
        setTimeout(()=>{
          var  price = Math.random()*10;
          resolve(`价格是${price}`)
        },ms)
      })
    }
    // 输出价格
    function setPrice(name,price){
      return new Promise(resolve => {
        resolve(`${name}-${price}美金`)
      })
    }
    // 封装
    async function price (name) {
      const value = await getPrice(3000);
      const stock = await setPrice(name, value)
      return stock
    }
    // 使用
    price("灵魂").then(res => {
      console.log(res)
    }).catch(err => {
      console.error(res)
    })
    // 结果
    // => 灵魂-价格是***  美金
    

    如果你说不会promise那你就回去看我的promise再来。其实还可以看看generator。

    async报错处理

    // async是处理异步的,每一个await后面相当于一步,而且返回的是promise,一旦报错等同于reject。将不会再继续执行下去。
    const err = async function(val) {
       await Promise.reject('你写的这坨代码出bug咯!嘿嘿嘿');
       await Promise.resolve('你上一步就挂逼了我怎么可能还执行呢!'); 
    }
    // 使用
    err().then(res => { console.log(res) }).catch( err => { console.log(err) }) // => 你写的这坨代码出bug咯!嘿嘿嘿!
    
    

    async第一步失败继续执行

    // 有时,我们希望即使前一个异步操作失败,也不要中断后面的异步操作。
    // 这时可以将第一个await放在try...catch结构里面,这样不管这个异步操作是否成功,第二个await都会执行。
    const err = async function(val) {
      try{
        await Promise.reject('你写的这坨代码出bug咯!嘿嘿嘿');
      } catch(e){
      }
      return await Promise.resolve('你好,我们终于见面了!'); 
    }
    // 使用
    err().then(res => { console.log(res) }).catch( err => { console.log(err) }) // => 你好,我们终于见面了!
    
    

    我不擅长学原理更不擅长学深了去。我就是学简单的用法!不全面,需要你自己多去看看文档,但是用在项目里这些差不多就够了。

    相关文章

      网友评论

          本文标题:ECMAScript之Async

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