2017-10-03 1 views
0

J'ai promis de transmettre des données par then et les données ont été tronquées. il y a une limite d'octets de données à transmettre sur une promesse?promesse tronquer les données

return this.conexao 
      .requestSend(url, locacoesJson) 
      .then(data=>{ 
       //data is not complete here 
      }); 

Je fais quelque chose de mal?

requestSend(url, json){ 

    return new Promise((resolve, reject)=>{ 
     try{ 
      const request = net.request(url); 

      request.setHeader('Content-Type', 'application/json'); 
      request.on('response', (response) => { 
       response.on('data', (chunk) => { 
        const data = `${chunk}`;    

        if(response.statusCode == 200) 
         resolve(data); 
        else 
         reject(data); 
       }); 

       response.on('error', (error) => { 
        reject(`${JSON.stringify(error)}`); 
       }) 
      }); 
      request.write(json, (teste) => {}) 
      request.end(); 
     }catch(e){ 
      reject(e); 
     } 
    }); 
} 
+1

Que signifie "n'est pas complet"? – glennsl

+0

Et quel est le but de faire '' 'const data =' $ {chunk} ';' '' '? – glennsl

+0

les données sont un grand json, et a été divisé à ce stade/j'utilise le morceau d'électron est de la documentation –

Répondre

0

Les promesses ne sont pas à blâmer ici. Le problème est que vous ne gérez pas du tout le découpage et résolvez la promesse avec le contenu du premier morceau.

Vous devez assembler les blocs jusqu'à ce que vous les ayez tous, et puis résoudre la promesse. Sans être familier avec l'API que vous utilisez, je pense que ce serait quelque chose comme ceci:

requestSend(url, json){ 

    return new Promise((resolve, reject)=>{ 
     const request = net.request(url); 

     request.setHeader('Content-Type', 'application/json'); 
     request.on('response', (response) => { 
      let data = ''; 

      response.on('data', (chunk) => { 
       data += chunk; 
      }); 

      response.on('error', (error) => { 
       reject(`${JSON.stringify(error)}`); 
      }); 

      response.on('aborted',() => reject('Request aborted')); 

      response.on('end'() => { 
       if (response.statusCode === 200) { 
        resolve(data); 
       } else { 
        reject(data); 
       } 
      }); 
     }); 
     request.write(json, (teste) => {}) 
     request.end(); 
    }); 
} 

Notez que j'ai enlevé le try-catch parce qu'il était redondant.

+0

merci l'homme, ça marche !! mais ça ne va jamais à 'response.on ('end'() => {', savez-vous pourquoi? –

+0

désolé, fonctionnant parfaitement maintenant, j'ai mis 'on '(' data'') –