jqueryを使用してAPIを呼び出し、結果を取得する関数があります。 APIの終了は、テストのためだけに番号「19」を返すようにプログラムされています。 結果がredirectUrlまたはにErrorMessageことになっているReactJs Promise + Ajax戻り値
onSave(event) {
//event.preventDefault();
this.props.actions.clientAdd(this.state.credentials).then((result) => {
return this.setState({redirect: true, newCustomerId: result})
}).catch((result) => {
return this.setState({redirect: false, errorMessage: result})
});
}
を次のように私のコンポーネントで次に
export function clientAdd(data) {
return (dispatch) => {
return $.ajax({
url: "http://api.example.com/client/add/",
headers: {'AUTHORIZATION': `${sessionStorage.jwt}`},
type: 'POST',
cache: false,
data: data,
dataType: 'json',
success: function (data) {
let redirectUrl = '/client/' + data
return redirectUrl';
},
error: function(xhr, status, err) {
if (xhr.status === 401) {
sessionStorage.removeItem('jwt');
return '/signin';
}
console.log('xhr',xhr.responseText);
console.log('status',status);
console.log('err',err);
return dispatch({type: GET_CLIENT_FAIL, err});
}
})
}
}
、送信ボタンをクリックすると、それはのOnSave関数を呼び出します。
しかし、APIで返される番号19は引き続き取得しています。
コンポーネントでpromiseを使用したい場合は、$ .ajaxのreturn infrontを追加する必要があります。「then」は定義されません。あなたは何ができるか
AFAIK、 '$ .ajax'はPromiseを返しません。多分あなたは何かを使うべきでしょうか?あるいは、 '$ .ajax'呼び出しの周りに新しいPromiseをラップする必要があります。 –
私は$ .ajaxは約束ではありませんが、値を返します。ですから、私が必要とするのは、onSave関数がclientAdd関数を呼び出し、戻り値を受け取ったときに次の呼び出しに移ることです。 –
'jqXHR'オブジェクトを返すようです。 'success'コールバックは値を返しますが、明らかに' clientAdd'から返されません。また、 '(dispatch)=>'という別の関数をラップしています。 –