首页 > express 接收http请求时怎么做异步回复

express 接收http请求时怎么做异步回复

var app = require('express')();
app.post('/getsomething', function(req, resp){

//操作A:根据req去另一个地方请求数据(异步)
//此时无法立即回复这个请求

});

想要在操作A有结果的时候拿到当时的resp,可以回复这个请求resp.send('result')

可以实现吗?

尝试按req的某个字段将resp存到redis中,当操作A有结果时取出来回复
但是存redis时JSON.stringify(resp)失败, Converting circular structure to JSON

求大神指教


如果不是楼上描述的情况,只是返回一次response,那么少年,放心异步去吧。只是别忘了做好异步的控制(无论是传统回调还是promise,generator,async)。

举个例子,数据库的相关访问(io操作)大部分情况下都是异步的,所以说在处理请求的时候就放心的异步吧。最后记得返回一个res,记得最后才返回。


你问的问题不成立
在建立连接之后,代码段是同步的,浏览器这个时候会等待返回,Http协议只能一次返回数据,此时做异步操作没有意义。当执行到resp.send之后,客户端会收到数据并关闭这个链接。

我有点明白你的意思,你想的是client请求后,先给个回复,然后过一会儿有了操作之后,再给个回复
那就是socket.io啊,想什么时候发数据就什么时候发


想要在操作A有结果的时候拿到当时的resp,可以回复这个请求resp.send('result') 可以实现吗?

当然可以,我假设你的异步请求A可以得到一个Promise,参考代码:

app.post('/getsomething', function(req, resp){
    //参数在这
    var aaa = req.params.aa;
    requestA()
        .then(function(resultFromA){
            //在这组合你的参数aaa和从A拿来的结果
            resp.send(结果);
        });
});

尝试按req的某个字段将resp存到redis中,当操作A有结果时取出来回复

上一问解决了,你还需要这个么?

【热门文章】
【热门文章】