1

我想得到一个建议。在我的 nodeJS/Mongo Stack 中,我的一个 Rest API 需要时间才能返回,因为它在返回结果之前正在执行操作链。但是对于一些操作,我不关心相同的返回状态。所以我的问题是,REST API 是否可以在完成所有操作之前返回结果,而不是只等待主要操作。

我的原始代码是这样的。

router.post('/updateStatus’, validateToken, function(req, res) {
    if (req.body.hasOwnProperty(‘param1’) && req.body.hasOwnProperty(‘param2’) ) {

        statusCollection.updateStatus(req.body.param1, req.body.param2,function (err, out) {

        reportCollection.updateReport(req.body.param1, req.body.param2,function (err, out) {
            var result = {status:200, data:out};
            res.json(result);

        } );


        } );
    } else {
            res.status(422);
            res.json({error:'Missing required params'});
     }

});

我想更改为:

router.post('/updateStatus’, validateToken, function(req, res) {
    if (req.body.hasOwnProperty(‘param1’) && req.body.hasOwnProperty(‘param2’) ) {

        statusCollection.updateStatus(req.body.param1, req.body.param2,function (err, out) {

            var result = {status:200, data:out};
            res.json(result);

        //***************Will continue in After returning API ********************
        reportCollection.updateReport(req.body.param1, req.body.param2,function (err, out) {} );


        } );
    } else {
            res.status(422);
            res.json({error:'Missing required params'});
     }

});

即,我将在 statusCollection.updateStatus() 之后返回结果,而不是等到 reportCollection.updateReport()。这个可以吗?

4

1 回答 1

0

有时,您可能会执行繁重的操作,在这种情况下,您不能总是等到将结果返回给客户端。

出于这个原因,您必须考虑客户需要什么以及可以在后台完成哪些不会影响客户的操作。

当您发现这种情况时,您可以拆分任务并使用作业或其他策略来委派必须在后台完成的代码并减少响应时间。

有时,如果客户端需要该操作的结果是最新的,您可以在繁重的操作完成后使用 websocket 或 pull 来更新客户端。

这是分离计算的常用策略,对我来说不会出现错误。

于 2020-01-06T14:58:05.327 回答