关于node Koa2 异步回调的问题 - CNode技术社区

关于node Koa2 异步回调的问题
发布于 8 年前 作者 enternull 3871 次浏览 来自 问答
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在有些情况也是必须的。

回到顶部

AltStyle によって変換されたページ (->オリジナル) /