Comment gérer ETIMEDOUT erreur?

Comment gérer l'erreur etimedout sur cet appel?

var remotePath = "myremoteurltocopy" var localStream = fs.createWriteStream("myfil");; var out = request({ uri: remotePath }); out.on('response', function (resp) { if (resp.statusCode === 200) { out.pipe(localStream); localStream.on('close', function () { copyconcurenceacces--; console.log('aftercopy'); callback(null, localFile); }); } else callback(new Error("No file found at given url."), null); }) 

Il y a un moyen d'attendre plus longtemps? Ou pour demander à nouveau le fichier distant?

Qu'est-ce qui peut provoquer exactement cette erreur? Timeout seulement?

    Ceci est causé lorsque la réponse de votre demande n'est pas reçue dans un délai donné (par option de module de demande d' timeout ).

    Essentiellement pour capturer cette erreur en premier, vous devez enregistrer un gestionnaire en cas d' error , donc l'erreur non out.on('error', function (err) { /* handle errors here */ }) ne sera plus lancée: out.on('error', function (err) { /* handle errors here */ }) . D'autres explications ici .

    Dans le gestionnaire, vous pouvez vérifier si l'erreur est ETIMEDOUT et appliquer votre propre logique: if (err.message.code === 'ETIMEDOUT') { /* apply logic */ } .

    Si vous souhaitez demander de nouveau le fichier, je suggère d'utiliser les modules new -retry ou node-backoff . Cela rend les choses beaucoup plus simples.

    Si vous souhaitez attendre plus longtemps, vous pouvez définir l' option timeout de la demande vous-même . Vous pouvez le configurer à 0 pour aucun délai.

    Nous pourrions regarder l'objet d'erreur pour un code propriété qui mentionne l'erreur possible du système et dans les cas d' ETIMEDOUT où un appel réseau échoue, agissez en conséquence.

     if (err.code === 'ETIMEDOUT') { console.log('My dish error: ', util.inspect(err, { showHidden: true, depth: 2 })); }