nodejs - Comment promettre http.request? rejeter a été appelé deux fois

Je suis d'essayer d'envelopper http.request en Promise:

 new Promise(function(resolve, reject) {
    var req = http.request({
        host: '127.0.0.1',
        port: 4000,
        method: 'GET',
        path: '/api/v1/service'
    }, function(res) {
        if (res.statusCode < 200 || res.statusCode >= 300) {
            //First reject
            reject(new Error('statusCode=' + res.statusCode));
            return;
        }
        var body = [];
        res.on('data', function(chunk) {
            body.push(chunk);
        });
        res.on('end', function() {
            try {
                body = JSON.parse(Buffer.concat(body).toString());
            } catch(e) {
                reject(e);
                return;
            }
            resolve(body);
        });
    });
    req.on('error', function(err) {
        //Second reject
        reject(err);
    });
    req.write('test');
}).then(function(data) {
    console.log(data);
}).catch(function(err) {
    console.log(err);
});

Si j'obtiens errornous statusCode de serveur distant, il va appeler Première rejeter et après un peu de temps Deuxième rejeter. Comment faire correctement de sorte qu'il appelle seulement d'une seule rejeter (je pense que Première rejeter est appropriée dans ce cas)? Je pense que j'ai besoin de fermer res moi-même, mais il n'y a pas de close() méthode sur ClientResponse objet.

UPD:
Deuxième rejeter déclenche que très rarement - pourquoi?

source d'informationauteur happy_marmoset