个人理解promise是将异步处理转换为同步处理的一种解决方案,能够经过下面代码理解下。javascript
var sleep = function (index) { setTimeout(() => { // 模拟异步处理 console.log(`sleep ${index}`) }, 500 * index); } var fn = function () { console.log('start') sleep(1); // 这里是异步处理函数 console.log('end') } fn()
咱们指望的结果是java
start sleep 1 end
但由于sleep是异步处理(延迟了n秒后才执行),最后的执行结果是promise
start end sleep `
如今使用promise改造下,将sleep函数返回一个Promise,而后使用调用这个Promise对象的then方法。异步
var sleep = function (index) { return new Promise(function (resolve, reject) { setTimeout(() => { console.log(`sleep ${index}`) resolve() }, 500 * index); }) } var fn = function () { console.log('start') sleep(1).then(() => { console.log('end') }); } fn()
程序执行结果与预期结果一致。async
resolve能够带一些参数,这些参数能够在then中访问,因此返回结果能够经过resolve返回。函数
var sleep = function (index) { return new Promise(function (resolve, reject) { setTimeout(() => { const result = `sleep ${index}` resolve(result) }, 500 * index); }) } var fn = function () { console.log('start') sleep(1).then((info) => { console.log(info) console.log('end') }); } fn()
函数执行结果与预期结果一致。spa
await的意思是阻塞,await 必须放在 以 async 装饰的函数中,以下面形式code
async function fn (){ await promisefn(); }
如今将上面使用then的promosi改形成使用await形式。对象
var sleep = function (index) { return new Promise(function (resolve, reject) { setTimeout(() => { const result = `sleep ${index}` resolve(result) }, 500 * index); }) } var fn = async function () { console.log('start') const info = await sleep(1) console.log(info) console.log('end') } fn()