es6之promise、async函数

我不是女神ヾ 2022-04-05 07:18 288阅读 0赞

promise

Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(resolved)(已成功)和rejected(已失败)。

就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。then方法回调中需要获取异步操作中的值,并且依赖于promise对象的resolved或者rejected抛出的对象

  1. const promise = new Promise(function(resolve, reject) {
  2. if (判断){
  3. resolve(value);
  4. } else {
  5. reject(error);
  6. }
  7. });
  8. promise.then(function(value) {//接受resolve成功状态数据
  9. // success
  10. }, function(error) {//接受rejected失败状态数据
  11. // failure
  12. });
  13. function timeout(ms) {
  14. return new Promise((resolve, reject) => {
  15. setTimeout(resolve, ms, 'done it you want do');//异步操作,
  16. });
  17. }
  18. timeout(1000).then((value) => {
  19. console.log(value);
  20. });

Promise 新建后就会立即执行。

async函数

用来表示函数是异步的,定义的函数会返回一个promise对象,可以使用then方法添加回调函数。

  1. async function asyFun() {
  2. return '----';
  3. }
  4. asyFun().then(val => {
  5. console.log(val);// '----'
  6. });
  7. async 定义的函数有返回值,return '----';相当于Promise.resolve('----'),没有声明式的 return则相当于执行了Promise.resolve();

await 可以理解为是 async wait 的简写。await 必须出现在 async 函数内部,不能单独使用。

await 后面可以跟任何的JS 表达式。虽然说 await 可以等很多类型的东西,但是它最主要的意图是用来等待 Promise 对象的状态被 resolved。如果await的是 promise对象会造成异步函数停止执行并且等待 promise 的解决,如果等的是正常的表达式则立即执行。

  1. function sleep(second) {var oldDate=new Date();var newDate=0;
  2. return new Promise((resolve, reject) => {
  3. setTimeout(() => {
  4. resolve('request done! ' + Math.random());
  5. newDate=new Date();
  6. console.log(newDate-oldDate);
  7. }, second);
  8. })
  9. }
  10. async function bugDemo() {
  11. await sleep(1000).then((value)=>{console.log(value)});
  12. await sleep(1000).then((value)=>{console.log(value)});
  13. await sleep(1000).then((value)=>{console.log(value)});
  14. console.log('clear the loading~');
  15. }
  16. bugDemo();
  17. 打印如下:
  18. Promise {<pending>}__proto__: Promise[[PromiseStatus]]: "resolved"[[PromiseValue]]: undefined
  19. VM72:4 1012
  20. VM72:4 1004
  21. VM72:4 1016
  22. VM72:13 clear the loading~

发表评论

表情:
评论列表 (有 0 条评论,288人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6async函数

    `async`函数返回一个 Promise 对象,可以使用`then`方法添加回调函数。当函数执行的时候,一旦遇到`await`就会先返回,等到异步操作完成,再接着执行函数体内

    相关 ES6Generator函数

    Generator 函数是一个状态机,封装了多个内部状态。 一是,`function`关键字与函数名之间有一个星号; 二是,函数体内部使用`yield`表达式,定义不同的内