나는 내 행동에 소품을 전달하는 redux-form을 가지고있다. this.props.userImages [0] 속성은 해당 양식에 입력 된 파일의 이미지 파일입니다. 그런 다음 해당 이미지를 가져 와서 XMLHttpRequest를 Cloudinary로 보내면 해당 이미지에 대한 URL이 생성됩니다. 일단 URL 데이터 (xhr.responseText)를 받으면 다른 모든 소품과 병합하여 API (모든 양식 정보 + 새로 만든 이미지 URL)에 내 소품을 게시 할 수 있습니다.redux 액션에서 XMLHttpRequests를 처리하는 방법은 무엇입니까?
해결할 URL을 생성하라는 요청이있을 때까지 기다려야한다는 것을 알고 있지만, 정보를 가져 와서 게시하기 전에 소품과 병합 할 수있는 다른 기능으로 전달하기 전에 문제를 해결하는 것이 좋습니다. 내 API.
//..
function generateUrl(props) {
// Grabs image file from my form's file input and uploads
// to cloudinary service so that a URL can be generated
const cloudinaryURL = 'https://api.cloudinary.com/v1_1/<my_name>/image/upload';
const apiKey = 'secret_key';
const uploadPreset = 'test_preset';
const data = new FormData();
data.append('file', props.userImages[0]);
data.append('upload_preset', uploadPreset);
data.append('api_key', apiKey);
const xhr = new XMLHttpRequest();
xhr.open('POST', cloudinaryURL, true);
xhr.send(data);
xhr.onReadyStateChange =() => {
if (xhr.readyState == 4 && xhr.status == 200) {
return JSON.parse(xhr.responseText);
}
};
return xhr.onReadyStateChange();
}
export function createReview(props) {
const imageUrl = generateUrl(props);
const mergedProps = //...
// Here I'd like to merge my newly generated
// url back into props before I post to my API like so...
const request = axios.post(`${REQUEST_URL}/api`, mergedProps)
return {
type: CREATE_REVIEW,
payload: request
}
};
모든 도움을 주시면 대단히 감사하겠습니다.
'XMLHttpRequest'는 약속과 관련이 없으며 관련이 없습니다. 나는 약속의 맥락에서 그 질문을 이해하지 못한다. – Sukima
폼 데이터를 보낼 때 준비 상태가 4이고 상태가 200 인 경우 XMLHttpRequest가 responseText를 반환 할 때까지 기다려야한다고 생각합니다. 그래서이 인스턴스를 받기 위해 기다려야하므로 즉시 반환 할 수 없다고 생각합니다. 준비 상태 및 상태. 맞는지 아닌지 알려주세요. 감사! – hidace
그것은 정확하지만 약속과는 아무런 관련이 없습니다. 또한 XHR 콜백을 사용해야하는 것은 아무것도 _return_하지 않습니다. – Sukima