Node.js Promise Async 学习

Promise 简单理解

个人理解promise是将异步处理转换为同步处理的一种解决方案,能够经过下面代码理解下。javascript

不返回结果的Promise

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()

程序执行结果与预期结果一致。
image.pngasync

返回结果的Promise

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 代替 then 方法

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()
相关文章
相关标签/搜索