我已經寫了下面的代碼,用於在承諾的幫助下異步上傳服務器上的文件。而且我們知道promise.all將失敗,一旦任何承諾失敗。所以,我想知道哪個承諾實際上失敗了,在我的案例中,承諾失敗的文件名稱。我正在嘗試console.log(e1),但它沒有給我關於失敗的承諾的信息。任何人都可以幫我做嗎?如何從promise.all獲得拒絕承諾?
uploadFilesAndSendStatus(stateType, notes, estimate, visibleToCustomer = null)
{
let filesPromise = Promise.resolve([]);
const promises = this.state.files_to_upload.map((file) => {
return this.uploadFilesOnServer(file);
});
filesPromise = Promise.all(promises).then((results) => {
return [].concat(...results);
}).catch((e1) =>{
console.log(e1);
this.setState({
serverActionPending: false,
serverActionComplete: false,
file_upload_try_again: true,
});
});
}
UploadFilesOnServer代碼:
uploadFilesOnServer(file) {
let files=[];
let file_id='';
const image=file;
const promise = getAttachmentUploadURL(this.props.task.id)
.then((imageUrlResponse) => {
const data = new FormData();
data.append('file-0', image);
const { upload_url } = JSON.parse(imageUrlResponse);
return uploadAttachment(upload_url, data);
})
.then ((updateImageResponse) => {
file_id= JSON.parse(updateImageResponse);
files.push(file_id);
return files;
});
return promise;
}
會是一個解決方案:http://bluebirdjs.com/docs/ api/reflect.html – frulo
我不認爲你想'JSON.parse'的'e1' – Bergi
是的。編輯。 @Bergi 但我仍然無法獲得所需的信息。 – HamidArrivy