我理解的 js 异步成长总结

Posted beautifulboy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我理解的 js 异步成长总结相关的知识,希望对你有一定的参考价值。

本文是自己的理解,如果有错误的地方,还请各路大神指出

 

首先说下我最常用的 Promise

getHandlePickupQrPromise() {
  // 定义返回 Promise对象
  // Promise接收一个回调函数 (success,error)=>{} 
  return new Promise((resolve, reject) => {
    getPickupQr({
      str: JSON.stringify({ type: "order_consume", order_id: this.orderId })
    })((err, res) => {
      if (err) {
        // 出现错误回调 抛出 并返回错误信息
        reject(err);
      } else {
        if (res.data.errno === 0) {
          // 返回成功回调 抛出 并返回成功数据
          resolve(res.data.data.base64);
        } else {
          reject(new Error(res.data.errmsg));
        }
      }
    });
  });
}

getHandlePickupQrPromise().then((base64) => {
  // .then 成功的回调,参数是一个回调函数,用来执行拿到成功数据做之后的处理
  console.log(base64)
}).catch((err) => {
  // .catch 失败的回调,参数是一个回调函数,用来执行拿到失败数据做之后的处理
  console.log(err)
});

 

本人才疏学浅,如有不对的地方,还望大神指点一二

 

 

ES7 async await

// async 定义的函数会返回一个promise对象
async function test() {
  return 123;
}

test().then(val => {
  console.log(val);// 123
});

 

实例

let initPromise = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject("success")
    }, 3 * 1000);
  })
}

//async 必须包含 await 或者理解 await 必须出现在 async 函数内部,不能单独使用。
async function init() {
  //await 后面可以跟任何的JS 表达式
  // await 如果没有返回结果就不会继续走下面的 if else
  let data = await initPromise().catch(err => {
    // catch 出现错误的值 做接受到错误的处理
    console.log(err)
  })
  if (data) {
    console.log("有值了")
  } else {
    console.log(data)
  }
}
init()

 

以上是关于我理解的 js 异步成长总结的主要内容,如果未能解决你的问题,请参考以下文章

回归 | js实用代码片段的封装与总结(持续更新中...)

ES7-Es8 js代码片段

几个关于js数组方法reduce的经典片段

理解js中的异步编程

JavaScript异步编程

对js运算符“||”和“&&”的总结