美文网首页
Nodejs - Koa2返回结果过程可以为异步

Nodejs - Koa2返回结果过程可以为异步

作者: cheerfun | 来源:发表于2018-12-05 23:12 被阅读0次

Koa2中返回结果函数可包含异步过程,如果使用nodejs版本大于8,可以使用Async/Await;如果nodejs版本较低,函数也可以返回Promise,结果也能正确返回。

如果用户请求中没有异步的操作,当然这很少见,和其它语言中的过程没有区别,但不涉及异步的过程貌似在Nodejs中没有什么卵用,例如:

const Koa = require("koa");
const app = new Koa();
const Router = require("koa-router");
const router = new Router();

app.use(router.routes());

router.post(ctx => {
  return 234 * 123;
});

app.listen(2333, () => { });

是没什么卵用,原因是在涉及I/O的操作,如对数据库、文件等的操作,在Nodejs中是异步的,而顺序执行返回的结果有很大可能是不对的。例如上传文件,考虑到如果用户可能上传较大文件,我们一般采用流写入保存文件,否则需要将所有客户端传来的文件接受完毕并全部读入内存,再开始写入,如果并发量大一些,系统就离着崩溃不远了。因此我们需要等待文件流全部保存,才能返回结果。

要做到这一点,我们可以使用Async/Await,但需要封装流写入过程为Promise。如下:

function asyncRes() {
    return new Promise((resolve, reject) => {
        file.pipe(fs.createWriteStream(‘target.png’));
           file.on(‘close’, err => {
            if (err) {
               reject({msg: ‘fail’})
            }
            resolve({msg: ‘success’})
        })
    }
}

接下来,在router中调用该函数。

const Koa = require("koa");
const app = new Koa();
const Router = require("koa-router");
const router = new Router();

app.use(router.routes());

router.post(async (ctx) => {
  await asyncRes();
});

app.listen(2333, () => { });

相关文章

  • Nodejs - Koa2返回结果过程可以为异步

    Koa2中返回结果函数可包含异步过程,如果使用nodejs版本大于8,可以使用Async/Await;如果node...

  • 读 koa2 源码后的一些思考与实践

    koa2的特点优势 什么是 koa2 Nodejs官方api支持的都是callback形式的异步编程模型。问题:c...

  • nodejs 学习笔记(1)koa2 koa-generator

    koa2是nondejs的开发框架,最近学习nodejs,这里记记笔记 首先安装好nodejs 安装koa2,全局...

  • 2019-04-08

    Nodejs -- 使用koa2搭建数据爬虫 当前爬虫项目开发所需中间件: cheerio: 则能够对请求结果进行...

  • 【十】10分钟精通小程序 | 云函数异步返回结果

    异步返回结果 promise()方法 在云函数中处理一些异步操作,在异步操作完成后再返回结果给到调用方。 此时我们...

  • 10、异步回调(Future)

    没有返回值的异步回调(runAsync): 结果: 有返回值的异步回调(supplyAsync): 返回成功: 结...

  • 手写promise

    promise是什么? 1、主要用于异步计算2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果3、可...

  • promise

    promise是什么? 1、主要用于异步计算2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果3、可...

  • vue中Promise的实战用法

    promise是什么? 1、主要用于异步计算2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果3、可...

  • 异步编程最佳实践

    1.什么是异步? 先理清楚几个概念: 1)同步:请求需要立即返回结果。 2)异步:请求无需立即返回结果。 3)阻塞...

网友评论

      本文标题:Nodejs - Koa2返回结果过程可以为异步

      本文链接:https://www.haomeiwen.com/subject/ehmgcqtx.html