91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

koa2中使用async 、await、promise解決異步問題的示例分析

發布時間:2021-07-21 11:36:39 來源:億速云 閱讀:118 作者:小新 欄目:web開發

這篇文章給大家分享的是有關koa2中使用async 、await、promise解決異步問題的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

關鍵詞:async 、await、promise

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

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

async、await基本的語法就是:

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

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

如果不處理異步的情況:

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

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

getData函數的代碼:

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的相關介紹可以移步 大白話講解Promise(一)

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

koa2中具體的代碼:

/**
 * koa2路由代碼
 */
//引入router模塊
var router = require('koa-router')();
//引入server模塊 封裝的請求函數
var server = require('../server');
//url 是假的額 寫的百度的網址
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函數里可以多次使用await 語句,我以為只能用一次await!!!并不是的!!!!

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

感謝各位的閱讀!關于“koa2中使用async 、await、promise解決異步問題的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延寿县| 微山县| 江华| 原平市| 渝北区| 若羌县| 东山县| 广东省| 桐乡市| 鹰潭市| 南昌市| 拜城县| 西峡县| 宁晋县| 贡嘎县| 宜兴市| 清涧县| 东丰县| 万盛区| 安康市| 集贤县| 新邵县| 思南县| 安西县| 安平县| 靖江市| 马鞍山市| 曲松县| 石阡县| 澎湖县| 乌兰浩特市| 潮安县| 腾冲县| 吴旗县| 堆龙德庆县| 铁岭市| 平舆县| 兴安盟| 稻城县| 黄石市| 淮阳县|