2016-09-14 3 views
0

Ich lerne Knoten. Ich habe eine Konsolen-App, die Anfragen an Web-Services in Auftrag geben muss. Insbesondere muss ich drei Anfragen in der Reihenfolge machen. In einem Versuch, diese Anfragen zu machen, verwende ich die eingebaute HTTPS module. Ich habe eine Anfrage erfolgreich ausgeführt. Aber ich muss drei hintereinander machen. Ich bin mir nicht sicher, wie ich das machen soll. Im Moment habe ich:Wie rufe ich drei Anfragen in Reihenfolge an?

console.log('Running Request #1...'); 
var options = { 
    host: 'example.com', 
    path: '/api/service', 
    port: 443, 
    method: 'GET', 
    headers: { 
    'api-key': '[Hidden]' 
    } 
}; 

var req = https.request(options, (res) => { 
    res.on('data', (d) => {}); 
}); 
req.end(); 

req.on('error', (e) => { 
    console.error(e); 
}); 

Ich bin mir nicht sicher, wie ich meine drei Anfragen in Auftrag zu rufen. Gleichzeitig jedoch einen Fehler elegant behandeln. Wenn ich Versprechungen hätte, würde ich wissen, wie man sie aneinander kettet und einfach den Handler catch benutzt. Aber ich bin mir nicht sicher, wie man Anforderungen aneinander ketten kann, da das HTTPS-Modul die Arrow-Funktionssyntax verwendet.

Jede Hilfe wird geschätzt.

+0

Sie betrachten können, entweder mit Rückruf oder Versprechen, die 3 Anfragen in Reihe zu ketten. Für async empfehle ich Ihnen, sich die [asynC# series] (http://caolan.github.io/async/docs.html#.series) anzuschauen, denn versprechen Sie sich Guiguis Antwort –

Antwort

0

Versuchen Sie dies wünschen:

var https = require('https'); 
    var urls = ['url1', 'url2', 'url3']; 

    var request = function(url) { 
    console.log(url); 
    return new Promise((resolve, reject) => { 
     https.get(url, (res) => { 
     res.on('end',() => { 
      resolve('what'); 
     }); 

     res.on('data', data =>{ 

     }); 
     }).on('error', e => { 
     reject(e); 
     }); 
    }); 
    }; 

    var promise = request(urls.shift()); 
    while(urls.length > 0) { 
    let url = urls.shift(); 
    promise = promise.then(function() { 
     return request(url); 
    }); 
    } 
    promise.catch(e => console.log); 
0

Verwendung Versprechen betrachten mit reduzieren, so etwas wie dieses

var urls=['u1','u2','u3']; 

var er=0 

function getPromise(url) { 
    return new Promise(function (resolve,reject) { 
     setTimeout(function() { 
      console.log(url+ " is resolved in 2 sec") 
      er++ 
      if(er==1) 
      { 
       reject(url) 
      }else{ 
       resolve(url) 
      } 


     },2000) 
    }) 
} 



urls.reduce(function (pre,cur) { 
    return pre.then(function() { 
     return getPromise(cur) 
    }) 
},new Promise(function (resolve,reject) { 
    resolve(null) 
})) 

.then(function (result) { 
    console.log("final result is "+result) 
},function (e) { 
    console.log("something wrong happens : "+e) 
}) 

Wiedergabe mit dem Code, ich denke, es will, ist man

Verwandte Themen