2016-04-19 7 views
1

Ich habe ein Nodejs Skript gemacht, um CSS-Dateien in unsere Web-Anwendung hochladen. Ich habe alles weggelassen, was nicht notwendig ist:Convert Callbacks zu Versprechen in Nodejs

var downloadCSS = function() { 
    var download = wget.download(src, output, options); 
    download.on('end', function(outputMessage) { 
    var unzipStream = fs.createReadStream(output).pipe(unzip.Extract({ path: path })); 
    unzipStream.on('close', function() { 
     findFilesAsync(path); 
    }); 
    }); 
} 

var findFilesAsync = function(path) { 
    for (var vendor in searchList) { 
    (function(filePath, vendor, loginCredentials){ 
     glob(filePath, function(err, files) { 
     login(loginCredentials, files[0], vendor); 
     }) 
    })(filePath, vendor, loginCredentials); 
    } 
}; 

var login = function(credentials, file_local, vendor) { 
    request.post(
    'https://server', 
    function(error, response, body) { 
     getSettings(cookie, file_local, vendor); 
    } 
); 
}; 

var getSettings = function(cookie, file_local, vendor) { 
    request.get(
    'https://server', 
    function(error, response, body) { 
     fileUpload(cookie, settings, file_local, vendor); 
    } 
); 
}; 

var fileUpload = function(cookie, settings, file_local, vendor) { 
    var CSS_file = fs.createReadStream(file_local); 

    CSS_file.on('error', function(err) { 
    console.log('error at reading CSS file'); 
    }); 

    request.post(
    'https://server', 
    function(error, response, body) { 
     setSettings(cookie, settings, vendor); 
    } 
); 
}; 

var setSettings = function(cookie, settings, vendor) { 
    request.put(
    'https://server', 
    function(error, response, body) { 
     logout(cookie, settings, vendor); 
    } 
); 
}; 

var logout = function(cookie, settings, vendor) { 
    request.get(
    'https://server', 
    function(error, response, body) { 
    } 
); 
}; 

Um eine CSS-Datei der Funktionen von oben nach unten aufgerufen hochladen, wenn kein Fehler vorhanden ist:

downloadCSS() 
findFilesAsync() 
login() 
getSettings() 
fileUpload() 
setSettings() 
logout() 

Es gibt 5 CSS-Dateien, so, wenn ein Datei wird in der findFilesAsync() Funktion gefunden, eine neue login() Funktion wird asynchron aufgerufen.

Ich weiß, dass dies sauberer mit Versprechungen getan werden kann, aber ich weiß nicht, wo ich anfangen soll?

+2

FWIW, nicht alle sind sich einig, dass alles sauberer w/Versprechen ist. Ich bin wirklich ein großer Fan von async.js für die Art von Dingen, über die Sie sprechen. – Paul

+0

Haben Sie einen Blick auf [Wie konvertiere ich eine bestehende Callback-API zu Versprechen?] (Http://stackoverflow.com/q/22519784/1048572) Bitte versuchen Sie etwas. – Bergi

Antwort

0

Werfen Sie einen Blick auf diese MDN Promise reference sie ein schönes Beispiel Funktion für HTTP-Anfragen gegeben haben, die Versprechen verwendet. Also, um Rückrufe zu vermeiden Sie ändern müssen/ändern request Klasse

Verwandte Themen