I am working on redux-form atm and found the piece of code. Its working for me but is there any cleaner way to write this in ES6 style?
const asyncValidate = (values/* , dispatch */) => {
return new Promise((resolve, reject) => {
try {
if (['john', 'paul', 'george', 'ringo'].includes(values.name)) {
const error = {
name: 'That username is taken'
};
throw error;
}
resolve();
} catch (e) {
reject(e);
}
});
};
I would appreciate your help
const asyncValidate = (values/* , dispatch */) => {
return new Promise((resolve, reject) => {
const errors = {};
if (['john', 'paul', 'george', 'ringo'].includes(values.name)) {
errors.name = 'That username is taken';
}
reject(errors);
});
};
probably cleaner way?!
If you throw an error inside the promise, the catch() method will catch it, not the try/catch. In this example, if any error in the promise1, promise2, or promise4, the catch() method will handle it.
catch " around the executor automatically catches the error and turns it into rejected promise. This happens not only in the executor function, but in its handlers as well. If we throw inside a . then handler, that means a rejected promise, so the control jumps to the nearest error handler.
catch() The catch() method returns a Promise and deals with rejected cases only. It behaves the same as calling Promise.
try
/catch
is redundant in promise chains and promise executor functions.
Any error thrown is automatically converted to a rejection of the promise you're supposed to return. The promise code calling your function takes care of this. So just do:
const asyncValidate = values => new Promise(resolve => {
if (['john', 'paul', 'george', 'ringo'].includes(values.name)) {
throw { name: 'That username is taken'};
}
resolve();
});
and it gets converted to a rejection.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With