第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Axios POST 請(qǐng)求在使用 Promise.all 時(shí)返回空數(shù)組

Axios POST 請(qǐng)求在使用 Promise.all 時(shí)返回空數(shù)組

慕尼黑5688855 2023-05-11 14:16:12
使用. requests_Promise.all我在這里做錯(cuò)了什么,因?yàn)槲艺J(rèn)為使用axios post方法會(huì)返回一個(gè)承諾?  const doUpload = async (fileList: FileList) => {    const requests: Array<void | AxiosResponse<any>> = [];    Array.from(fileList).forEach(async file => {      const formData = new FormData();      const blob = new Blob([file]);      formData.append(file.name, blob);      requests.push(        await axios          .post(            'https://jsonplaceholder.typicode.com/posts',            {              ...formData,            },            {              headers: {                'Content-Type': 'multipart/form-data',              },              onUploadProgress: (progressEvent: ProgressEvent) =>                handleUploadProgress(progressEvent, file.lastModified),            }          )          .catch(error => {            handleUploadError(file.lastModified);          })      );    });    try {      const data = await Promise.all(requests);      console.dir(data);    } catch (error) {      console.log(error);    }  };
查看完整描述

2 回答

?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

Jeremy 是對(duì)的,您await的代碼中有不必要的 s,但主要問(wèn)題是您通過(guò)將catch處理程序放在 promise from 上post然后讓該處理程序完成而不拋出錯(cuò)誤或返回任何內(nèi)容來(lái)隱藏 promise 拒絕。這將拒絕變成了價(jià)值的實(shí)現(xiàn)undefined。


刪除catch處理程序(可能)或讓它返回一些你可以用來(lái)知道post失敗的東西。


FWIW,這是一個(gè)執(zhí)行上述操作并使用 的Array.from映射功能的示例(因?yàn)槟谶M(jìn)行映射操作);看評(píng)論:


const doUpload = async (fileList: FileList) => {

? // Use `map`

? const requests = Array.from(fileList, file => {

? ? const formData = new FormData();

? ? const blob = new Blob([file]);

? ? formData.append(file.name, blob);


? ? // No need for `await` here

? ? return axios.post(

? ? ? 'https://jsonplaceholder.typicode.com/posts',

? ? ? {

? ? ? ? ...formData,

? ? ? },

? ? ? {

? ? ? ? headers: {

? ? ? ? ? 'Content-Type': 'multipart/form-data',

? ? ? ? },

? ? ? ? onUploadProgress: (progressEvent: ProgressEvent) =>

? ? ? ? ? handleUploadProgress(progressEvent, file.lastModified),

? ? ? }

? ? );

? ? // No `.catch` here (or have one, but make it return something useful

? });


? try {

? ? const data = await Promise.all(requests);

? ? console.dir(data);

? } catch (error) {

? ? console.log(error);

? }

};

如果你需要handleUploadError在那里的某個(gè)地方打電話,你可能會(huì)考慮使用Promise.allSettled(相對(duì)較新的)而不是Promise.all然后調(diào)用它來(lái)為它給你的數(shù)組中的任何被拒絕的承諾。


...當(dāng)使用 Promise.all 解析時(shí)。

只是一個(gè)旁注:使用Promise.all不會(huì)“解決”您傳遞給它的承諾。它只是觀察他們發(fā)生了什么。Promise.all承諾會(huì)解決,但無(wú)論您使用與否,它們都會(huì)解決。

一些可能有用的承諾術(shù)語(yǔ):

  • fulfill?- 將 promise 狀態(tài)從pending更改為fulfilled并具有特定的fulfillment 值

  • reject?- 將 promise 狀態(tài)從pending更改為rejected并給出特定的拒絕原因

  • resolve?- 直接(通過(guò)履行或拒絕)或間接(通過(guò)使其結(jié)果取決于另一個(gè)承諾的結(jié)果)來(lái)確定承諾的最終結(jié)果


查看完整回答
反對(duì) 回復(fù) 2023-05-11
?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊

您正在將已解決的承諾推送到您的數(shù)組 ( requests.push(await axios.post()))。只需推送 Promises 而無(wú)需等待它們(requests.push(axios.post()))。然后就Promise.all可以做它的工作了。


const doUpload = async(fileList: FileList) => {

    const requests: Array < void | Promise<any> > = [];


    Array.from(fileList).forEach( file => {

        const formData = new FormData();

        const blob = new Blob([file]);

        formData.append(file.name, blob);


        requests.push(axios.post(/* ... */ ));

    });


    try {

        const data = await Promise.all(requests);

        console.dir(data);

    } catch (error) {

        console.log(error);

    }

};


查看完整回答
反對(duì) 回復(fù) 2023-05-11
  • 2 回答
  • 0 關(guān)注
  • 262 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)