> 文章列表 > promise

promise

promise

1.promise作用:
promise:解决异步回调的问题

2.目的:
创建异步对象,当异步对象中的异步操作执行完成之后,再执行想要执行的东西。

  resolve表示将状态变成成功完成,reject表示将状态变成失败完成当resolve方法执行完成之后,再执行then方法let p = new Promise((resolve, reject) => {setTimeout(() => {console.log('执行完毕');resolve();// 表示完成}, 3000)})p.then(() => {console.log('promise异步操作完成了');})

Promise在实际环境下的应用

“使用Promise我们可以用同步的方式写异步代码。其实Promise在实际的应用中往往起到代理的作用。例如,我们像我们发出请求调用服务器数据,由于网络延时原因,我们此时无法调用到数据,我们可以接着执行其它任务,等到将来某个时间节点服务器响应数据到达客户端,我们即可使用promise自带的一个回调函数来处理数据。”

async/await特点

1.async/await更加语义化,async 是“异步”的简写,async function 用于申明一个 2.function 是异步的; await,可以认为是async wait的简写, 用于等待一个异步方法执行完成;
3.async/await是一个用同步思维解决异步问题的方案(等结果出来之后,代码才会继续往下执行)
4.可以通过多层 async function 的同步写法代替传统的callback嵌套

async function语法

自动将常规函数转换成Promise,返回值也是一个Promise对象
只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数
异步函数内部可以使用await

多个await命令的异步操作,如果不存在依赖关系(后面的await不依赖前一个await返回的结果),用Promise.all()让它们同时触发

function test1 () {return new Promise((resolve, reject) => {setTimeout(() => {resolve(1)}, 1000)})}function test2 () {return new Promise((resolve, reject) => {setTimeout(() => {resolve(2)}, 2000)})}async function exc1 () {console.log('exc1 start:',Date.now())let res1 = await test1();let res2 = await test2(); // 不依赖 res1 的值console.log('exc1 end:', Date.now())}async function exc2 () {console.log('exc2 start:',Date.now())let [res1, res2] = await Promise.all([test1(), test2()])console.log('exc2 end:', Date.now())}exc1();exc2();