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

詳解koa2學(xué)習(xí)中使用 async 、await、promise解決異步的問題

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

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

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

先說一下async、await,第一次見到這兩個(gè)詞是在學(xué)習(xí)vue的時(shí)候。因?yàn)榍岸嗽趯懘a的時(shí)候經(jīng)常的會(huì)遇到向后臺(tái)請(qǐng)求數(shù)據(jù)這樣的場(chǎng)景,等待數(shù)據(jù)返回才可以進(jìn)行下一步的操作。這就不得不處理異步這種情況。

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();為一個(gè)封裝了請(qǐng)求數(shù)據(jù)的方法;

如果不處理異步的情況:

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

await 命令后面的 函數(shù)返回的是一個(gè)Promise 對(duì)象,運(yùn)行結(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ù),就會(huì)報(bào)錯(cuò)。

koa2中具體的代碼:

/**
 * koa2路由代碼
 */
//引入router模塊
var router = require('koa-router')();
//引入server模塊 封裝的請(qǐng)求函數(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"
 }
}

哦對(duì)了 async函數(shù)里可以多次使用await 語句,我以為只能用一次await?。。〔⒉皇堑模。。?!

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • node koa2實(shí)現(xiàn)上傳圖片并且同步上傳到七牛云存儲(chǔ)

    node koa2實(shí)現(xiàn)上傳圖片并且同步上傳到七牛云存儲(chǔ)

    這篇文章主要介紹了node koa2實(shí)現(xiàn)上傳圖片并且同步上傳到七牛云存儲(chǔ),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • nodejs報(bào)digital?envelope?routines::unsupported錯(cuò)誤的最新解決方法

    nodejs報(bào)digital?envelope?routines::unsupported錯(cuò)誤的最新解決方法

    這篇文章主要介紹了nodejs報(bào)digital?envelope?routines::unsupported錯(cuò)誤的最新解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • node將geojson轉(zhuǎn)shp返回給前端的實(shí)現(xiàn)方法

    node將geojson轉(zhuǎn)shp返回給前端的實(shí)現(xiàn)方法

    這篇文章主要介紹了node將geojson轉(zhuǎn)shp返回給前端的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 手把手帶你搭建一個(gè)node cli的方法示例

    手把手帶你搭建一個(gè)node cli的方法示例

    這篇文章主要介紹了手把手帶你搭建一個(gè)node cli的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • node使用Git Bash作為命令行終端示例

    node使用Git Bash作為命令行終端示例

    這篇文章主要為大家介紹了node使用Git Bash作為命令行終端示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • nodejs中的express-jwt的使用解讀

    nodejs中的express-jwt的使用解讀

    這篇文章主要介紹了nodejs中的express-jwt的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • node異步使用await和不用await的區(qū)別實(shí)例分析

    node異步使用await和不用await的區(qū)別實(shí)例分析

    這篇文章主要介紹了node異步使用await和不用await的區(qū)別,結(jié)合實(shí)例形式分析了node.js異步使用await和不用await的實(shí)例中,同步與異步執(zhí)行的區(qū)別,需要的朋友可以參考下
    2023-06-06
  • nodejs實(shí)現(xiàn)大文件(在線視頻)的讀取

    nodejs實(shí)現(xiàn)大文件(在線視頻)的讀取

    這篇文章主要為大家詳細(xì)介紹了nodejs實(shí)現(xiàn)大文件的讀取,比如在線視頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Nodejs的express使用教程

    Nodejs的express使用教程

    Express 是一個(gè)簡(jiǎn)潔、靈活的 node.js Web 應(yīng)用開發(fā)框架, 它提供一系列強(qiáng)大的特性,幫助你創(chuàng)建各種 Web 和移動(dòng)設(shè)備應(yīng)用,本篇文章給大家介紹nodejs的express使用教程,感興趣的朋友參考下
    2015-11-11
  • NodeJS實(shí)現(xiàn)微信公眾號(hào)關(guān)注后自動(dòng)回復(fù)功能

    NodeJS實(shí)現(xiàn)微信公眾號(hào)關(guān)注后自動(dòng)回復(fù)功能

    這篇文章主要為大家詳細(xì)介紹了NodeJS實(shí)現(xiàn)微信公眾號(hào)關(guān)注后自動(dòng)回復(fù)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評(píng)論