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()
相關文章
相關標籤/搜索