广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >koa2中使用async 、await、promise解决异步问题的示例分析
  • 546
分享到

koa2中使用async 、await、promise解决异步问题的示例分析

2024-04-02 19:04:59 546人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关koa2中使用async 、await、promise解决异步问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关键词:async 、awai

这篇文章给大家分享的是有关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中具体的代码:


//引入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;

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解决异步问题的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: koa2中使用async 、await、promise解决异步问题的示例分析

本文链接: https://www.lsjlt.com/news/74591.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • koa2中使用async 、await、promise解决异步问题的示例分析
    这篇文章给大家分享的是有关koa2中使用async 、await、promise解决异步问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关键词:async 、awai...
    99+
    2022-10-19
  • JS中的async与await异步编程及await使用陷阱源码分析
    这篇“JS中的async与await异步编程及await使用陷阱源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JS中...
    99+
    2023-07-05
  • React中setState同步或异步问题的示例分析
    这篇文章主要为大家展示了“React中setState同步或异步问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“React中setState同步或异步问题的示例分析”这篇文章吧。1....
    99+
    2023-06-25
  • C#中使用async和await实现异步Udp通讯的示例代码
    目录C/S架构客户端实现客户端主流程和实现客户端发送消息实现客户端监听消息实现服务器实现服务器主流程和实现服务器发送消息实现服务器监听消息实现总结在之前的C#版本中, 如果我们想要进...
    99+
    2022-11-13
  • spring boot使用@Async注解解决异步多线程入库的问题
    目录前言项目实况介绍第一种方式第二种方式这里有个坑!这里有两个坑!总结前言 在开发过程中,我们会遇到很多使用线程池的业务场景,例如定时任务使用的就是ScheduledThreadPo...
    99+
    2022-11-13
  • 如何使用Promise链式调用解决多个异步回调的问题
    小编给大家分享一下如何使用Promise链式调用解决多个异步回调的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!介绍所谓Promise,简单来说就是一个容器,里面保存着某个未来才会结束...
    99+
    2022-10-19
  • promise和co搭配生成器函数方式解决js代码异步流程的示例分析
    这篇文章将为大家详细讲解有关promise和co搭配生成器函数方式解决js代码异步流程的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在es6中引入的原生Prom...
    99+
    2022-10-19
  • 如何使用Promise解决多个异步Ajax请求导致的代码嵌套问题
    这篇文章将为大家详细讲解有关如何使用Promise解决多个异步Ajax请求导致的代码嵌套问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题前端小同学在做页面的时候,犯...
    99+
    2022-10-19
  • Pinterest MySQL利用分片来解决百亿数据存储问题的示例分析
    这篇文章将为大家详细讲解有关Pinterest MySQL利用分片来解决百亿数据存储问题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Pinteres 是你感兴...
    99+
    2022-10-18
  • 大数据分析之 Python:如何使用 NumPy 解决数据处理中的瓶颈问题?
    在现代社会中,数据的产生量越来越大,数据的处理和分析也变得越来越复杂。在大数据分析过程中,数据处理是一个必不可少的环节。Python 作为一种高效的数据处理语言,能够帮助我们更好地处理数据,NumPy 作为 Python 中的一个重要库,...
    99+
    2023-10-03
    大数据 numpy unix
  • wordpress在安装使用中出现404、403、500及502问题的分析与解决方法
    前言 最近在使用WordPress的时候遇到了一些错误提示,相信大家在使用wordpress建立网站的时候,都会遇到一些问题,一般来说分为2种情况。 第一种情况是程序报错:程序报错一般会直接在网站顶部或者网站其他部分显示...
    99+
    2022-06-12
    wordpress 404 403 500 502
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作