Chciałbym mieć radę. W stosie Nodejs / Mongo Stack, jeden z moich API odpoczynek wymaga czasu, ponieważ robi łańcuchy pracy przed zwróceniem wyników. Ale dla niektórych operacji nie zaniepokojony statusem zwrotu tego samego. Więc moje pytanie brzmi, czy jest w porządku, aby spoczywać API, aby zwrócić wynik przed zakończeniem wszystkich operacji, zamiast tego czekać tylko dla większej operacji.

Mój oryginalny kod wygląda tak.

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'});
     }

});

Chciałbym zmienić jako:

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'});
     }

});

Tj. zwrócę wynik po statusCollection.updateStatus () i nie będę czekał na reportCollection.updateReport (). Czy to jest ok?

1
Raghu Vallikkat 6 styczeń 2020, 06:43

1 odpowiedź

Najlepsza odpowiedź

Czasami możesz mieć ciężkie operacje, w takim przypadku nie zawsze możesz czekać przed zwróceniem wyniku klientowi.

Z tego powodu musisz myśleć o tym, co jest potrzebne dla klienta i co można zrobić w tle, co nie wpłynie na klienta.

Gdy to zauważysz, możesz podzielić zadania i użyć zadań lub innych strategii, aby delegować kod, który musi być wykonywany w tle, i skrócić czas odpowiedzi.

Czasami można używać Websinget lub ciągnięcie, aby zaktualizować klienta po zakończeniu ciężkiej pracy, jeśli klient potrzebuje wyniku tej operacji, aby być aktualne.

Jest to powszechna strategia oddzielania obliczeń i nie pojawia się dla mnie jako błąd.

0
Adrien De Peretti 6 styczeń 2020, 14:58