关于node Koa2 异步回调的问题
function demo(context, next) {
console.log(1)
setTimeout(() => {
let string_num = Date.now()
console.log(string_num)
context.body = string_num
context.res.end()
}, 1000)
})
}
写了个DEMO 流程是发起请求然后 console.log(1) 程序中有个定时器 延迟一秒后返回数据 前端接收不到数据 但是加入promise
function demo(context, next) {
console.log(1)
return new Promise((resolve,reject) => {
setTimeout(() => {
let string_num = Date.now()
console.log(string_num)
context.body = string_num
context.res.end()
resolve()
}, 1000)
})
}
它就变成同步的了 每次输出时间戳后才会处理下一个请求 请问nodejs有什么方式可以接收多个请求然后异步返回数据的嘛? 框架用的koa2
5 回复
你要处理多个请求了,为什么要promise
@chenzeZzz 不用promise 我收不到异步返回的结果啊
@enternull 服务路由没问题,你有请求就会有返回,promise可以控制返回的时间,但是高并发应当让请求尽快返回
注释掉context.res.end()
就可以了
const Koa = require('koa')
const app = new Koa()
const http = require('http')
app.use(function demo(context, next) {
console.log(Date.now())
return new Promise((resolve, reject) => {
setTimeout(() => {
let string_num = Date.now()
// console.log(string_num)
context.body = string_num
// context.res.end()
resolve(string_num)
}, 1000)
})
})
app.listen(3000, () => {
console.log('server runnning on 3000')
})
function testPort() {
http.get('http://localhost:3000', res => {
let error
if(res.statusCode !== 200) {
error = new Error(`请求失败:${res.statusCode}`)
}
if(error) {
res.resume()
console.log(error.message)
return
}
let data = ''
res.on('data', chunk => {
data += chunk
}).on('error', (e) => {
console.log(`错误: ${e.message}`)
}).on('end', () => {
console.log(data.toString())
})
})
}
testPort()
testPort()
输出
// 1524705937439
// 1524705937439
// 1524705938461
// 1524705938461
不知道是不是你想要的结果😂
我觉得可以使用ES6的async/await,当然promise在有些情况也是必须的。