async 函数

async function ``_name_``([``_param_``[, ``_param_``[, ... ``_param_``]]]) { ``_statements _``}
name:函数名称;param:传递给函数的参数;statements:函数体语句。
返回值:返回的Promise对象,并且会运行执行resolve异步函数的返回结果,或者运行拒绝reject,如果异步函数抛出异常

await

[return_value] = await expression;
expression:表达式:一个Promise对象或者任何要等待的值;
返回值:返回Promise对象的处理结果,如果等待的不是Promise对象,则返回该值本身。await只会得到成功resolve的结果,若出现reject或者异常的结果需要通过try/catch来捕获
注意await操作符必须在async函数中使用
描述:await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其回调的resolve函数参数作为 await 表达式的值,继续执行 async function

  1. function resolveAfter2Seconds(x) {
  2. return new Promise(resolve => {
  3. setTimeout(() => {
  4. resolve(x);
  5. }, 2000);
  6. });
  7. }
  8. async function f1() {
  9. var x = await resolveAfter2Seconds(10);
  10. console.log(x); // 2s后返回:10
  11. }
  12. f1();
  13. // reject或者异常
  14. async function f3() {
  15. try {
  16. var z = await Promise.reject(30);
  17. } catch (e) {
  18. console.log(e); // 30
  19. }
  20. }
  21. f3();

应用

文件异步解析

  1. async beforeUpload(file) {
  2. console.log(file);
  3. const isLt5M = file.size / 1024 / 1024 < 5;
  4. if (!isLt5M) {
  5. this.$message.warning("文件大小不能大于5MB");
  6. }
  7. let isLtData = null;
  8. try {
  9. const targetFileResult = await this.readFileAsync(file);
  10. const sheetLength = [];
  11. /* Parse data */
  12. const workbook = XLSX.read(targetFileResult, {
  13. type: "binary"
  14. });
  15. workbook.SheetNames.forEach(sheet => {
  16. //生成json表格内容
  17. const ws = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
  18. sheetLength.push(Number(ws.length));
  19. });
  20. const all = sheetLength.reduce((total, cur) => {
  21. return total + cur;
  22. });
  23. isLtData = all < 100;
  24. if (!isLtData) {
  25. this.$message.warning(`当前文件数据条数超过一万条,请重试`);
  26. }
  27. console.log("all =>", all);
  28. } catch (error) {
  29. this.$message.error(`当前文件数据解析失败,请重试`);
  30. return Promise.reject(false);
  31. }
  32. return isLt5M && isLtData ? Promise.resolve(true) : Promise.reject(false);
  33. },
  34. readFileAsync(file) {
  35. return new Promise((resolve, reject) => {
  36. const reader = new FileReader();
  37. reader.onload = () => {
  38. resolve(reader.result);
  39. };
  40. reader.onerror = reject;
  41. reader.readAsBinaryString(file);
  42. });
  43. }