欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

async/await與promise(nodejs中的異步操作問題)

 更新時間:2017年03月03日 11:09:41   作者:晴天_雨天  
這篇文章主要介紹了async/await與promise(nodejs中的異步操作問題),非常不錯,具有參考借鑒價值,需要的朋友可以參考下

舉例寫文章詳情頁面的時候的一個場景:首先更改文章詳情中的 PV,然后讀取文章詳情,然后根據(jù)文章詳情中文章 Id 查閱該文章評論和該文章作者信息。獲取全部數(shù)據(jù)之后渲染文章詳情頁。數(shù)據(jù)庫操作都是異步的,最直接想到的辦法就是一層一層的回調(diào)函數(shù),問題出來了:十分不雅觀,要是層再多一點還會有更多麻煩。怎么解決?業(yè)內(nèi)為了處理異步操作問題也是拼了,什么async,q,bluebird,co,處理方式不同,各有千秋,感興趣可以了解一下,但是驚喜的發(fā)現(xiàn)nodejs 7.6已經(jīng)默認支持ES7中的 async/await 了,結(jié)合ES6中的 promise對象,用起來不亦樂乎的。

Async/await的主要益處是可以避免回調(diào)地獄(callback hell)問題。

基本概念:

async 表示這是一個async函數(shù),await只能用在這個函數(shù)里面。

await 表示在這里等待promise返回結(jié)果了,再繼續(xù)執(zhí)行。

await 后面跟著的應(yīng)該是一個promise對象(當然,其他返回值也沒關(guān)系,不過那樣就沒有意義了…)

舉例:

獲取返回值:

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      // 返回 ‘ok'
      resolve('ok');
    }, time);
  })
};
var start = async function () {
  let result = await sleep(3000);
  console.log(result); // 收到 ‘ok'
};

捕捉錯誤:

var sleep = function (time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      // 模擬出錯了,返回 ‘error'
      reject('error');
    }, time);
  })
};
var start = async function () {
  try {
    console.log('start');
    await sleep(3000); // 這里得到了一個返回錯誤
    
    // 所以以下代碼不會被執(zhí)行了
    console.log('end');
  } catch (err) {
    console.log(err); // 這里捕捉到錯誤 `error`
  }
};

 在循環(huán)中:

var start = async function () {
  for (var i = 1; i <= 10; i++) {
    console.log(`當前是第${i}次等待..`);
    await sleep(1000);
  }
};

再循環(huán)中使用不需要閉包,每次循環(huán)會被阻塞。

最前面提到的場景:(綜合使用)

var showArticle = async function () {
    await new Promise(function (resolve, reject) {
      PostModel.incPv(postId, function (result) {
        resolve(result);
      });
    });// pv 加 1
    var post = await new Promise(function (resolve, reject) {
      PostModel.getPostById(postId, function (article) {
        resolve(article);
      });
    });// 獲取文章信息
    await new Promise(function (resolve, reject) {
      userModel.getUserById(post.author,function (author) {
        post.author=author;
        resolve();
      })
    });//獲取文章作者
    var comments = await new Promise(function (resolve, reject) {
      CommentModel.getComments(post._id, function (comment) {
        resolve(comment);
      });
    });// 獲取該文章所有留言
    for(var i=0;i<comments.length;i++){
      await new Promise(function (resolve, reject) {
        userModel.getUserById(comments[i].author,function (author) {
          comments[i].author=author;
          resolve();
        })
      });//獲取文章留言作者
    }
    if (!post) {
      req.session.error = '該文章不存在';
      return res.redirect('/post');
    }
    res.render('post',{post: post, comments: comments});
  };
  showArticle();

以上所述是小編給大家介紹的async/await與promise(nodejs中的異步操作問題),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 使用node操作SQLite的方法

    使用node操作SQLite的方法

    SQLite是一種輕量級的嵌入式關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它以庫的形式存在,可以嵌入到應(yīng)用程序中,使用Node.js操作SQLite數(shù)據(jù)庫有多種方式,其中常用的方式包括使用sqlite3模塊、sequelize模塊和knex模塊,本文將詳細的給大家介紹這幾種方式,需要的朋友可以參考下
    2023-10-10
  • 基于Nodejs實現(xiàn)文件壓縮和解壓功能

    基于Nodejs實現(xiàn)文件壓縮和解壓功能

    在?windows?系統(tǒng)上面,我們壓縮文件,常常需要安裝一些壓縮軟件才能實現(xiàn)壓縮,可能有些還存在一些問題,所以本文就來使用Nodejs實現(xiàn)文件壓縮和解壓功能吧
    2024-03-03
  • node.js實現(xiàn)登錄注冊頁面

    node.js實現(xiàn)登錄注冊頁面

    這篇文章主要為大家詳細介紹了node.js實現(xiàn)簡單的登錄注冊頁面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • NodeJS爬蟲實例之糗事百科

    NodeJS爬蟲實例之糗事百科

    本篇文章主要給大家講解了一下用NodeJS學習爬蟲,并通過爬糗事百科來講解用法和效果,一起學習下吧。
    2017-12-12
  • 詳解koa2學習中使用 async 、await、promise解決異步的問題

    詳解koa2學習中使用 async 、await、promise解決異步的問題

    這篇文章主要介紹了詳解koa2學習中使用 async 、await、promise解決異步的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 基于Node.js的http模塊搭建HTTP服務(wù)器

    基于Node.js的http模塊搭建HTTP服務(wù)器

    這篇文章主要為大家介紹了基于Node.js的http模塊來搭建HTTP服務(wù)器的示例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • 前端如何更好的展示后端返回的十萬條數(shù)據(jù)

    前端如何更好的展示后端返回的十萬條數(shù)據(jù)

    這篇文章主要為大家介紹了前端如何更好的展示后端返回的十萬條數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • Node爬取大批量文件的方法示例

    Node爬取大批量文件的方法示例

    這篇文章主要介紹了Node爬取大批量文件的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Node.js開啟Https的實踐詳解

    Node.js開啟Https的實踐詳解

    最近因為工作需要,需要將網(wǎng)站切換到了https。其實去年就想遷的遷移過去,但是資金緊缺就找了個免費的證書,實際效果不是很好。但是最近騰訊云推出了免費的ssl證書申請。樓主是親測有效的。下面通過本文來一起看看Node.js開啟Https的詳細步驟吧,有需要的可以參考借鑒。
    2016-10-10
  • 基于Node.js模板引擎教程-jade速學與實戰(zhàn)1

    基于Node.js模板引擎教程-jade速學與實戰(zhàn)1

    下面小編就為大家?guī)硪黄贜ode.js模板引擎教程-jade速學與實戰(zhàn)1。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論