2016-09-03 2 views
0

Я принести, он выдает сообщение об ошибке:Как ошибка catch от асинхронного действия с сокращением?

fetchAuthorization(username, password) { 
    return fetch(`https://api.github.com/user`, { 
     method: 'GET', 
     headers: { 
      "Accept": 'application/json', 
      "Content-Type": 'application/json', 
      "Authorization": "Basic " + btoa(`${username}:${password}`) 
     }, 
    }) 
    .then(res => { 
     if(res.status !== 200) { 
      throw Error("Bad validation"); 
     } 
     return res.json(); 
    }); 
}, 

этого асинхронном действие (перевожди):

export const onSignInAction = (username, password) => { 
    return dispatch => { 
     return api.fetchAuthorization(username, password) 
      .then(res => { 
       dispatch(signInAction(username, password, res)); 
      }) 
      .catch(err => console.log(err)); 
    } 
} 

следующие:

handleSignIn = (username, password) => { 
    const { onSignInAction } = this.props; 
    onSignInAction(username, password); 
} 

А теперь я хочу поймать ошибку из моей выборки :

handleSignIn =() => { 
    const { onSignIn } = this.props; 
    const { errorMessage, open } = this.state; 
    const username = this.usernameField.getValue(); 
    const password = this.passwordField.getValue(); 
    try { 
     onSignIn(username, password); 
    } 
    catch (Error) { 
     this.setState({ 
      errorMessage: 'Incorrect username or password' 
     }); 
    } 
} 

Как правильно его поймать? Мой код не делает этого. Благодаря!

+0

Является 'возвращение диспетчерская =>' действительный синтаксис? – guest271314

+0

@ guest271314 yes –

+0

Вы пробовали 'throw'ing' err' из '.catch()'? – guest271314

ответ

0

Вы можете throw ошибка из .catch(), заменить Promise.prototype.catch() для try..catch

var onSignInAction =() => { 
 
    return Promise.reject(new Error("Bad validation")).catch(e => { 
 
    console.log("catch 1", e.message); 
 
    throw e 
 
    }); 
 
} 
 

 
onSignInAction() 
 
.catch(err => { 
 
    console.log("catch 2:", { 
 
    errorMessage: 'Incorrect username or password' 
 
    }, err.message); 
 
});

+0

Это не помогает –

+0

@ guest271314 Да, это работает. Благодаря! –