如何在响应post请求后,服务端继续执行代码?
{
id: 1
data: 2
}
* abc(){
const ctx = this.ctx;
const result = yield this.ctx.service.bcd();
ctx.body = {result.data};
if(result.id){
todo....
}
}
这段代码会在执行完if后才发送body的响应内容
该怎么写让请求先被响应,然后继续执行if?
如何在响应post请求后,服务端继续执行代码?
{
id: 1
data: 2
}
* abc(){
const ctx = this.ctx;
const result = yield this.ctx.service.bcd();
ctx.body = {result.data};
if(result.id){
todo....
}
}
这段代码会在执行完if后才发送body的响应内容
该怎么写让请求先被响应,然后继续执行if?
* abc(){
const ctx = this.ctx;
const result = yield this.ctx.service.bcd();
ctx.body = {result.data};
process.nextTick(()=>{
if(result.id){
todo....
}
})
}
用事件
const Emitter = require('events').EventEmitter
const emitter = new Emitter()
if(result._id) {
emitter.emit('data', result._id)
}
ctx.body = { result.data }
在别的地方监听data
事件
emitter.on(data', (data) => {
todo....
})
我感觉中间件就是解决你这类问题的。
下面的代码是koa官方提供的中间件例子,next()之后的代码就会在请求返回后执行。
async function responseTime(ctx, next) {
const start = Date.now();
await next();
const ms = Date.now() - start;
ctx.set('X-Response-Time', `${ms}ms`);
}
app.use(responseTime);
查看官方指南===>
https://github.com/koajs/koa/...
5 回答4.9k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
5 回答2k 阅读
3 回答2k 阅读
1 回答3.3k 阅读
3 回答2.2k 阅读✓ 已解决
为什么要这样操作呢,你后面的操作如果不成功会对之前的response有影响么,
如果你只是单纯的想在请求中"异步"执行一些操作,可以参考一下
app.runInBackground