当前位置:   article > 正文

Promise (三) async/await_redundant 'await' for a non-promise type

redundant 'await' for a non-promise type

async 函数

async 函数是使用async关键字声明的函数。 async 函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。asyncawait关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise

特点 

1. 函数的返回值为 promise 对象
2. promise 对象的结果由 async 函数执行的返回值决定
  1. async function main(){
  2. //1. 如果返回值是一个非Promise类型的数据,会返回一个resolved的promise对象,值为该数据
  3. // return 521;
  4. //2. 如果返回的是一个Promise对象
  5. return new Promise((resolve, reject) => {
  6. resolve('OK');
  7. // reject('Error');
  8. });
  9. //3. 抛出异常
  10. // throw "Oh NO";
  11. }
  12. let result = main();
  13. console.log(result);
'
运行

await 表达式

1. await 右侧的表达式一般为 promise 对象 , 但也可以是其它的值
2. 如果表达式是 promise 对象 , await 返回的是 promise 成功的值
3. 如果表达式是其它值 , 直接将此值作为 await 的返回值
  1. async function main(){
  2. let p = new Promise((resolve, reject) => {
  3. resolve('OK');
  4. // reject('Error');
  5. })
  6. //1. 右侧为promise的情况
  7. // let res = await p;
  8. //2. 右侧为其他类型的数据
  9. let res2 = await 20;
  10. // console.log(res2); // 20
  11. //3. 如果promise是失败的状态
  12. // try{
  13. // // let res3 = await p;
  14. // }catch(e){
  15. // console.log(e);
  16. // }
  17. }
  18. main();
'
运行

注意

1. await 必须写在 async 函数中 , async 函数中可以没有 await
2. 如果 await promise 失败了 , 就会抛出异常 , 需要通过 try...catch 捕获处理

async与await结合

  1. const fs = require('fs');
  2. const util = require('util');
  3. // 将 API 转为promise形式的函数
  4. const mineReadFile = util.promisify(fs.readFile);
  5. //回调函数的方式
  6. // fs.readFile('./resource/1.html', (err, data1) => {
  7. // if(err) throw err;
  8. // fs.readFile('./resource/2.html', (err, data2) => {
  9. // if(err) throw err;
  10. // fs.readFile('./resource/3.html', (err, data3) => {
  11. // if(err) throw err;
  12. // console.log(data1 + data2 + data3);
  13. // });
  14. // });
  15. // });
  16. //async 与 await
  17. // 出错也不需要每一层都去判断,使用try...catch即可
  18. async function main(){
  19. try{
  20. //读取第一个文件的内容
  21. let data1 = await mineReadFile('./resource/1.html');
  22. let data2 = await mineReadFile('./resource/2.html');
  23. let data3 = await mineReadFile('./resource/3.html');
  24. console.log(data1 + data2 + data3);
  25. }catch(e){
  26. console.log(e.code);
  27. }
  28. }
  29. main();
'
运行
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/1010152
推荐阅读
  

闽ICP备14008679号