最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年11月13日 11:06:30   作者:RiverSouthMan  
這篇文章主要介紹了詳解koa2學習中使用 async 、await、promise解決異步的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

關(guān)鍵詞:async 、await、promise

這三個東西 可以優(yōu)雅的解決異步問題。在學習koa2的時候遇到了獲取數(shù)據(jù)后再進行模板渲染的異步問題。在查找各種資料后成功的解決了該問題,現(xiàn)在寫個筆記記錄一下。

先說一下async、await,第一次見到這兩個詞是在學習vue的時候。因為前端在寫代碼的時候經(jīng)常的會遇到向后臺請求數(shù)據(jù)這樣的場景,等待數(shù)據(jù)返回才可以進行下一步的操作。這就不得不處理異步這種情況。

async、await基本的語法就是:

let asyncFn = async()=> {
 let data = null;
 data = await getData(url);//getData()返回的數(shù)據(jù)是 {name:'my name is data!'}
 console.log(data.name);//打印出的是my name is data! 
}

getData();為一個封裝了請求數(shù)據(jù)的方法;

如果不處理異步的情況:

let notAsyncFn =()=> {
 let data = null;
 data = getData(url);//getData()返回的數(shù)據(jù)是 {name:'my name is data!'}
 console.log(data.name);//打印出的是undefined; 因為data此時還是null;
}

await 命令后面的 函數(shù)返回的是一個Promise 對象,運行結(jié)果可能是 rejected,所以最好把 await 命令放在 try...catch 代碼塊中。

getData函數(shù)的代碼:

var getData = function (url){
  console.log("get start");
  console.log(url);
  return new Promise(function (resolve, reject) {
//下面的request()方法 是nodeJS的request模塊;
   request(url, function (error, response, body) {
    if (!error && response.statusCode == 200) {
     resolve(response.body);
    }else{
     //throw new Error(response.statusText)
     reject('===error===');
    }
   });

  })

  console.log("get end");

 }

promise的相關(guān)介紹可以移步 大白話講解Promise(一)

還有await 命令只能用在 async 函數(shù)之中,如果用在普通函數(shù),就會報錯。

koa2中具體的代碼:

/**
 * koa2路由代碼
 */
//引入router模塊
var router = require('koa-router')();
//引入server模塊 封裝的請求函數(shù)
var server = require('../server');
//url 是假的額 寫的百度的網(wǎng)址
const url = 'www.baidu.com';

router.get('/',async function (ctx,next){
 var data = await server.get(url);
 console.log('======data=====');
 console.log(data);
 await ctx.render('myPage',{
  title: '123wangcong',
  data: data
 })
});
module.exports = router;
/**
 * server模塊的代碼
 */
node的request模塊
var request = require('request');
module.exports = {
 get : function (url){
  console.log("get start");
  console.log(url);
  return new Promise(function (resolve, reject) {
   request(url, function (error, response, body) {
    if (!error && response.statusCode == 200) {
     resolve(response.body);
    }else{
     //throw new Error(response.statusText)
     reject('error===');
    }
   });

  })
  console.log("get end");
 }
}

把package也貼出來

{
 "name": "koa2-demo",
 "version": "0.1.0",
 "scripts": {
 "start": "NODE_ENV=development ./node_modules/.bin/nodemon bin/run",
 "test1": "NODE_ENV=test ./node_modules/.bin/nodemon bin/run",
 "koa": "./node_modules/.bin/runkoa bin/www",
 "pm2": "pm2 start bin/run ",
 "test": "./node_modules/.bin/mocha -u bdd"
 },
 "dependencies": {
 "co": "^4.6.0",
 "debug": "^2.2.0",
 "ejs": "^2.5.6",
 "jade": "~1.11.0",
 "koa": "^2.0.0",
 "koa-bodyparser": "^2.0.1",
 "koa-convert": "^1.2.0",
 "koa-json": "^1.1.1",
 "koa-logger": "^1.3.0",
 "koa-onerror": "^1.2.1",
 "koa-request": "^1.0.0",
 "koa-router": "^7.0.0",
 "koa-static": "^1.5.2",
 "koa-views": "^5.0.1",
 "runkoa": "^1.5.2"
 },
 "devDependencies": {
 "mocha": "^2.4.5",
 "nodemon": "^1.9.1",
 "should": "^8.3.0",
 "supertest": "^1.2.0"
 }
}

哦對了 async函數(shù)里可以多次使用await 語句,我以為只能用一次await!??!并不是的!?。?!

async更詳細的介紹可以 看這里 阮一峰async 函數(shù)的含義和用法

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在Node.js中實現(xiàn)關(guān)注列表和粉絲列表的方法示例

    在Node.js中實現(xiàn)關(guān)注列表和粉絲列表的方法示例

    在社交網(wǎng)絡(luò)或者任何需要用戶交互的應(yīng)用中,實現(xiàn)關(guān)注和被關(guān)注的功能是非常常見的需求,本文將通過一個簡單的例子,展示如何在Node.js環(huán)境下實現(xiàn)用戶的關(guān)注列表和粉絲列表,需要的朋友可以參考下
    2024-04-04
  • NodeJS?GRPC?多個?.proto?文件的處理步驟

    NodeJS?GRPC?多個?.proto?文件的處理步驟

    本文教程詳細介紹了在NodeJS環(huán)境中如何使用gRPC框架處理多個.proto文件,步驟包括安裝依賴、定義.proto文件、生成gRPC代碼、實現(xiàn)服務(wù)器和客戶端以及運行,適用于開發(fā)者在構(gòu)建分布式應(yīng)用時進行接口定義和服務(wù)實現(xiàn)
    2024-10-10
  • node.js express框架簡介與實現(xiàn)

    node.js express框架簡介與實現(xiàn)

    這篇文章主要介紹了node.js express框架簡介與實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • node實現(xiàn)爬蟲的幾種簡易方式

    node實現(xiàn)爬蟲的幾種簡易方式

    這篇文章主要給大家介紹了關(guān)于node實現(xiàn)爬蟲的幾種簡易方式,文中通過示例代碼介紹的非常詳細,對大家學習或者使用node具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • nodejs的安裝使用與npm的介紹

    nodejs的安裝使用與npm的介紹

    Node.js是一個Javascript運行環(huán)境(runtime environment),發(fā)布于2009年5月,由Ryan Dahl開發(fā),實質(zhì)是對Chrome V8引擎進行了封裝。本文詳細介紹了Node.js的安裝和使用,需要的朋友可以參考下
    2019-09-09
  • node.js中的fs.fchmod方法使用說明

    node.js中的fs.fchmod方法使用說明

    這篇文章主要介紹了node.js中的fs.fchmod方法使用說明,本文介紹了fs.fchmod的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • nodejs 中的讀取文件fs模塊示例詳解

    nodejs 中的讀取文件fs模塊示例詳解

    這篇文章主要為大家介紹了nodejs中的讀取文件fs模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Nodejs中的require函數(shù)的具體使用方法

    Nodejs中的require函數(shù)的具體使用方法

    這篇文章主要介紹了Nodejs中的require函數(shù)的具體使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Node.js實現(xiàn)解析post請求的方法詳解

    Node.js實現(xiàn)解析post請求的方法詳解

    這篇文章主要為大家詳細介紹了Node.js實現(xiàn)解析post請求方法的相關(guān)知識,文中的示例代碼講解詳細,具有一定的學習價值,有需要的小伙伴可以了解下
    2024-04-04
  • Node批量爬取頭條視頻并保存方法

    Node批量爬取頭條視頻并保存方法

    在本篇文章中我們給大家介紹了node爬取頭條里面的視頻,并進行批量保存的方法,有需要的朋友可以測試以下。
    2018-09-09

最新評論

广东省| 密云县| 陇西县| 泾阳县| 赤水市| 社旗县| 娄底市| 武陟县| 江都市| 岚皋县| 舞钢市| 诏安县| 江北区| 定结县| 郧西县| 甘南县| 鄂伦春自治旗| 利川市| 临桂县| 景东| 静乐县| 芜湖市| 东台市| 焦作市| 乌拉特后旗| 慈溪市| 正镶白旗| 定襄县| 登封市| 日照市| 奉化市| 巍山| 本溪| 珲春市| 灵武市| 武清区| 元朗区| 海口市| 礼泉县| 延川县| 阳城县|