Piszemy funkcję promisify, która zamienia funkcje wyższego rzędu w modelu error-first na obiekty thenable. Do dzieła.
Przykład funkcji wyższego rzędu z obsługą error-first:
function confirmAndCall(prompt, cb){
let response = confirm(prompt);
if(!response){
cb(new Error("Not confirmed"));
} else {
cb(null);
}
}
Przykłady użycia:
confirmAndCall("Do you agree for cookies?", function(err){
if(err){
console.warn(err);
return;
}
console.log("Im writing some cookies");
});
confirmAndCall("Can i redirect you?", function(err){
if(err){
console.warn(err);
return;
}
location.href = "https://www.google.com";
});
Promisify:
function promisify(originalFn) {
return function (...args) {
return new Promise((resolve, reject) => {
originalFn(...args, (err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
};
}
Użycie:
const confirmAsync = promisify(confirmAndCall);
confirmAsync("Can I redirect you?")
.then(function(){
location.href = "https://www.google.com";
})
.catch(function(err){
console.warn(err);
});
Temat będziemy zgłębiać, choć sama świadomość tego, czym jest proces promisify to już dużo – jest sporo bibliotek, które mogą robić to za nas.