2017-01-26 5 views
2

Ich benutze ein Node.js request-Modul, um eine HTTP-Anfrage zu machen und wollen die Antwort auf einige Stream. Hier sind zwei Codefragmente:Node.js Rohr http Anfrage & Promises

Ein ordnungsgemäß funktionierendes Beispiel. Ich übertrage nur eine Antwort von response Ereignis.

const fs = require('fs') 
const path = require('path') 
const request = require('request') 

const filepath = path.resolve('./tmp.zip') 
const ws = fs.createWriteStream(filepath) 

function get() { 
    return new Promise((resolve, reject) => { 
     request.get(uri, options) 
      .on('response', (res) => { 
       ws.on('finish',() => console.log('finish')) 
       res.pipe(ws) 
       resolve() 
      }) 
      .on('error', (err) => { 
       reject(err) 
      }) 
    }) 
} 

get().then(() => { 
    console.log('done') 
}).catch((err) => console.log(err)) 

nicht richtig funktioniert Beispiel. Ich gebe die Antwort in resolve Rückruf eines Versprechens und Rohr von ihnen auf Versprechen then Rückruf. Die Dateigröße dieses Ansatzes ist kleiner als beim ersten richtig funktionierenden Ansatz.

const fs = require('fs') 
const path = require('path') 
const request = require('request') 

const filepath = path.resolve('./tmp.zip') 
const ws = fs.createWriteStream(filepath) 

function get() { 
    return new Promise((resolve, reject) => { 
     request.get(uri, options) 
      .on('response', (res) => { 
       resolve(res) 
      }) 
      .on('error', (err) => { 
       reject(err) 
      }) 
    }) 
} 

get().then((res) => { 
    ws.on('finish',() => console.log('finish')) 
    res.pipe(ws) 
}).catch((err) => console.log(err)) 

Bitte, sagen Sie, warum das zweite Beispiel auch nicht richtig funktioniert?

Antwort

-1

Das ist seltsam. Ich ließ es mit http-Modul nicht mit Anfrage arbeiten ...

const fs = require('fs'); 
const path = require('path'); 
const http = require('http'); 

const filepath = path.resolve('./index.html'); 
const ws = fs.createWriteStream(filepath); 
const options = { 
    hostname: "your_url", 
    port: "80", 
    path: "/index.html" 
}; 

function get() { 
    return new Promise((resolve, reject) => { 
     http.get(uri, function(res) { 
      resolve(res); 
     }); 
    }); 
} 

get().then(function(res) { 
    console.log('then'); 
    ws.on('finish',() => { 
     console.log('finish'); 
    }) 
    res.pipe(ws); 
}).catch((err) => console.log(err)); 
Verwandte Themen