Ho un paio di metodi asincroni che sono fondamentalmente un sì e nessuna risposta
isUsernameAvalible()
isOnline()
isImage()
yada yada...
probabilmente avrai ormai il punto.
Come dimostrazione ... prova a pensare a questo come a una promessa di async più generica (non che abbia nulla a che fare con la manipolazione delle immagini) e potrebbe funzionare allo stesso modo per esempio isOnline(id).then(showOn, showOff)
function isImage (file) {
return new Promise(resolve => {
let img = new Image
img.src = URL.createObjectURL(file)
img.onload = () => resolve(true)
img.onerror = () => resolve(false)
})
}
function showError () {
// alert(not an image)
}
input.onchange = evt => {
isImage(evt.target.files[0]).then(isImage => {
isImage ? convert() : showError()
}, err => {
// code execution failed
// couldn't tell if it's a image or not
//
// alert(unknown error)
// URL.createObjectURL is not a function
})
}
vs
function isImage (file) {
return new Promise((resolve, reject) => {
let img = new Image
img.src = URL.createObjectURL(file)
img.onload = () => resolve(true)
img.onerror = () => reject(new Error('Not a image file'))
})
}
function showError (error) {
// alert(instanceof error)
}
input.onchange = evt => {
// This becomse a bit more nicer to read and write
isImage(evt.target.files[0]).then(convert, showError)
}
Mi sento come se il secondo metodo fosse un modo migliore per affrontarlo. Ma uso improprio il modo in cui le promesse dovrebbero gestire gli errori
Mi sento come se isSomething()
dovesse risolversi in un valore booleano vero / falso e rifiutato se c'è qualche errore di esecuzione del codice. Come non essere in grado di fare una richiesta GET
Che ne pensi?