es6之promise、async函数

本文深入探讨Promise对象和Async/Await函数在异步编程中的应用。Promise对象用于表示异步操作,有pending、fulfilled和rejected三种状态,简化了回调函数的复杂性。Async函数标记异步操作,返回一个Promise对象,而Await关键字用于暂停执行,直到Promise被解决。通过实例展示如何使用这些特性来简化异步代码。

promise

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

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

const promise = new Promise(function(resolve, reject) {
  if (判断){
    resolve(value);
  } else {
    reject(error);
  }
});
promise.then(function(value) {//接受resolve成功状态数据
  // success
}, function(error) {//接受rejected失败状态数据
  // failure
});
function timeout(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, ms, 'done it you want do');//异步操作,
  });
}

timeout(1000).then((value) => {
  console.log(value);
});

Promise 新建后就会立即执行。

async函数

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

async function asyFun() {
    return '----';
}

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

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

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

function sleep(second) {var oldDate=new Date();var newDate=0;
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('request done! ' + Math.random());
            newDate=new Date();
            console.log(newDate-oldDate);
        }, second);
    })
}

async function bugDemo() {
    await sleep(1000).then((value)=>{console.log(value)});
    await sleep(1000).then((value)=>{console.log(value)});
    await sleep(1000).then((value)=>{console.log(value)});
    console.log('clear the loading~');
}

bugDemo();
打印如下:
Promise {<pending>}__proto__: Promise[[PromiseStatus]]: "resolved"[[PromiseValue]]: undefined
VM72:4 1012
VM72:4 1004
VM72:4 1016
VM72:13 clear the loading~

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值