2016-12-15 1 views
0

Ok Ich habe die folgenden Codesres.end innerhalb einer verschachtelten Reihe von Rückruf

router.route('/getParkData/:parkLocationId').get(function(req, res){ 
    var id = req.params.parkLocationId; 
    var parkdata = {}; 
    parkInfo(id).then(function(data){ 
    if(data.parking_type == 'FREE') 
    { 


    var json = JSON.stringify({ 
     "error" : null, 
     "result" : null, 
     "message" : "free", 
     "error_code" : null 
    }); 
     res.end(json); 
    } 
    else 
    return getTwowheelers(id) 
    }).then(function(data){ 
    if(data[0].parking_type) 
     { 
     parkdata.parkingType = data[0].parking_type; 
     } 
     else 
     { 
     parkdata.parkingType = "paid"; 
     } 

    if(data.length > 0) 
     { 
     parkdata.tw = data[0].rate.tw[0]; 
     } 
     else 
     { 
      parkdata.tw= 0; 
     } 
     return getFourwheelers(id); 
    }).then(function(data){ 
    console.log(data.length); 
     if(data.length > 0) 
       { 
        parkdata.fw = data[0].rate.fw[0]; 
       } 
       else 
       { 
          parkdata.fw = 0; 
       } 
      res.json(mResponse.response(null, parkdata, "Success",200)); 
    }).catch(function(err){ 
     res.json(mResponse.response(null, null, "No data!",500)); 
    }); 

}); 

So wurde ich durch die Überprüfung der Bedingung eine schnelle Lösung zu tun und die respons.Its arbeiten gut endet, aber ich erhalte diesen Fehler.

Unhandled rejection Error: Can't set headers after they are sent. 
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11) 
at ServerResponse.header (C:\zoyoapp\node_modules\express\lib\response.js:719:10) 

So ist die res.end Endung ist nicht die execution.Any Art und Weise, in der ich es nicht diesen Fehler zeigen

+0

Bitte den Code richtig einrücken. – str

+0

Ihr Code scheint unvollständig zu sein, ohne die richtigen geschweiften Klammern, können Sie den vollständigen Code – Sridhar

+0

@Sridhar hey Ich habe die Bearbeitung –

Antwort

2

Error: Can't set headers after they are sent. passiert, weil Sie Antwort am Ende der Versprechenskette erneut senden. Sie können eine Versprechenskette frühzeitig brechen, indem Sie sie ablehnen.

router.route('/getParkData/:parkLocationId').get(function(req, res) { 
    var id = req.params.parkLocationId; 
    var parkdata = {}; 
    parkInfo(id).then(function(data) { 
     if (data.parking_type == 'FREE') { 
      return Promise.reject({ 
       type:'FREE_USER' 
       data: JSON.stringify({ 
       "error": null, 
       "result": null, 
       "message": "free", 
       "error_code": null 
       }) 
      }); //rejecting this promise 
     } else { 
      return getTwowheelers(id); 
     } 
    }).then(function(data) { 
     if (data[0].parking_type) { 
      parkdata.parkingType = data[0].parking_type; 
     } else { 
      parkdata.parkingType = "paid"; 
     } 

     if (data.length > 0) { 
      parkdata.tw = data[0].rate.tw[0]; 
     } else { 
      parkdata.tw = 0; 
     } 
     return getFourwheelers(id); 
    }).then(function(data) { 
     console.log(data.length); 
     if (data.length > 0) { 
      parkdata.fw = data[0].rate.fw[0]; 
     } else { 
      parkdata.fw = 0; 
     } 
     res.json(mResponse.response(null, parkdata, "Success", 200)); 
    }).catch(function(err) { 
     if(err.type === 'FREE_USER'){ 
      return res.send(err.data); // sending response only once 
     } 
     res.json(mResponse.response(null, null, "No data!", 500)); 
    }); 
+0

Wow, das ist eine wirklich gute Möglichkeit, es zu tun, so können wir ein Versprechen nirgendwo zurückweisen, aber ich habe nicht verstanden, wie Sie das Versprechen ohne es zu erstellen verwendet habe ich meine neue Promise.reject ({ type: 'FREE_USER "Das ist, was ich über Promise weiß, ein bisschen verwirrt. –

+0

Ja, Sie können statische Methoden auf" Versprechen "wie' Promise.resolve() ',' Promise.reject() 'verwenden. Hier ist [Mozilla Entwickler-Dokumente] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve#Using_the_static_Promise.resolve_method) – Sridhar

0

, wenn die Bedingung

if(data.parking_type == 'FREE') 

wahr ist, es wird Antwort machen könnte mit json

aber der Code wird weiter in nächsten dann und als nächstes dann würde es endlich die c finden ommand

res.json(mResponse.response(null, parkdata, "Success",200)); 

die versuchen, den Header zu setzen, der Fehler verursacht. Sie versuchen, eine Antwort nach res.end() zu senden;

Verwandte Themen