美文网首页
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