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

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

如何在打字稿中使用promise.allSettled?

如何在打字稿中使用promise.allSettled?

一只名叫tom的貓 2023-08-18 17:27:11
Typescript 構(gòu)建失敗,因?yàn)樗坪醪幌矚g,Promise.allSetttled即使我已經(jīng)設(shè)置了 ts config coilerOptions"lib": [ "ES2020.Promise" ],似乎 的響應(yīng)promise.allSettled不包括resultor reason。運(yùn)行 typescript build 時(shí)出現(xiàn)以下錯(cuò)誤:Property 'reason' does not exist on type 'PromiseSettledResult<IMyPromiseResult>'.和Property 'value' does not exist on type 'PromiseRejectedResult'.我的代碼塊如下所示,正如您所看到的,我正在嘗試訪問(wèn)reason每個(gè)result已解決的承諾。const myPromise = async () : Promise<IMyPromiseResult> {  return new Promise((resolve) => {    resolve("hello world")  })}const data = await Promise.allSettled([  myPromise()]);const response = data.find(res => res.status === 'fulfilled')?.result;if(!response) {  const error = data.find(res => res.status === 'rejected')?.reason;  throw new Error(error);}如何更新 Promise.allSettled 聲明以包含正確的接口?
查看完整描述

5 回答

?
慕桂英546537

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

使用類型保護(hù)。比內(nèi)聯(lián)類型保護(hù)更優(yōu)雅的解決方案是將它們定義為單獨(dú)的函數(shù),并且通過(guò)泛型綁定,您也可以獲得已實(shí)現(xiàn)的承諾的正確值,并且可以重用以滿足任何過(guò)濾需求allSettled。

不需要鑄造(通常應(yīng)該避免)。

const isRejected = (input: PromiseSettledResult<unknown>): input is PromiseRejectedResult =>?

? input.status === 'rejected'


const isFulfilled = <T>(input: PromiseSettledResult<T>): input is PromiseFulfilledResult<T> =>?

? input.status === 'fulfilled'


const myPromise = async () => Promise.resolve("hello world");


const data = await Promise.allSettled([myPromise()]);


const response = data.find(isFulfilled)?.value

const error = data.find(isRejected)?.reason


查看完整回答
反對(duì) 回復(fù) 2023-08-18
?
慕森卡

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

TypeScript 在檢查類型時(shí)不知道類型是否為PromiseFulfilledResult/ PromiseRejectedResult。


唯一的辦法就是鑄造承諾的結(jié)果。之所以可以這樣做,是因?yàn)槟呀?jīng)驗(yàn)證了已解決的承諾已實(shí)現(xiàn)或已拒絕。


看這個(gè)例子:


const myPromise = async (): Promise<string> => {

? return new Promise((resolve) => {

? ? resolve("hello world");

? });

};


const data = await Promise.allSettled([myPromise()]);


const response = (data.find(

? (res) => res.status === "fulfilled"

) as PromiseFulfilledResult<string> | undefined)?.value;


if (!response) {

? const error = (data.find(

? ? (res) => res.status === "rejected"

? ) as PromiseRejectedResult | undefined)?.reason;

? throw new Error(error);

}


查看完整回答
反對(duì) 回復(fù) 2023-08-18
?
慕村225694

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

使用類型保護(hù):


const isFulfilled = <T,>(p:PromiseSettledResult<T>): p is PromiseFulfilledResult<T> => p.status === 'fulfilled';

const isRejected = <T,>(p:PromiseSettledResult<T>): p is PromiseRejectedResult => p.status === 'rejected';


const results = await Promise.allSettled(...);

const fulfilledValues = results.filter(isFulfilled).map(p => p.value);

const rejectedReasons = results.filter(isRejected).map(p => p.reason);


查看完整回答
反對(duì) 回復(fù) 2023-08-18
?
動(dòng)漫人物

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

這讓ts不生氣。


const rawResponse = await Promise.allSettled(promiseArray);

const response = rawResponse.filter((res) => res.status === 'fulfilled') as PromiseFulfilledResult<any>[];


const result = response[0].value


查看完整回答
反對(duì) 回復(fù) 2023-08-18
?
長(zhǎng)風(fēng)秋雁

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

將回調(diào)定義find為類型保護(hù),返回類型謂詞:


type IMyPromiseResult = string


const response = data.find(

  (res): res is PromiseFulfilledResult<string> => res.status === 'fulfilled'

)?.value;


if (!response) {

  const error = data.find(

    (res): res is PromiseRejectedResult => res.status === 'rejected'

  )?.reason;

  throw new Error(error);

}

演示游樂(lè)場(chǎng)


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

添加回答

舉報(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)