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

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

Promise.allSettled() 響應(yīng)的類(lèi)型錯(cuò)誤

Promise.allSettled() 響應(yīng)的類(lèi)型錯(cuò)誤

叮當(dāng)貓咪 2023-02-17 10:26:44
我最近一直在嘗試在 NodeJS 上使用 Promise.allSettled 和 Typescript,但我遇到了響應(yīng)問(wèn)題。allSettled 方法返回一個(gè)數(shù)組和status: "rejected" | "fulfilled"一個(gè)值,以防它被滿(mǎn)足。問(wèn)題是,當(dāng)我嘗試訪問(wèn)響應(yīng)的值時(shí),出現(xiàn)以下錯(cuò)誤:Property 'value' does not exist on type 'PromiseSettledResult<unknown>'.Property 'value' does not exist on type 'PromiseRejectedResult'.ts(2339)下面我將留下一個(gè)簡(jiǎn)單的示例,您可以復(fù)制代碼并自己嘗試:const p1 = Promise.resolve(50); const p2 = Promise.resolve(100); const promiseArray = [p1, p2];   Promise.allSettled( promiseArray ).   then( results => results.forEach( result =>      console.log(result.status, result.value)));如果我在我的項(xiàng)目上運(yùn)行這段代碼,我會(huì)得到一個(gè)錯(cuò)誤,因?yàn)閞esult.value在最后。我在 Windows 版本 12.18.3 上運(yùn)行我的節(jié)點(diǎn),并且我已經(jīng)將我的目標(biāo)設(shè)置為tsconfig.json能夠ES2020使用該方法本身。
查看完整描述

4 回答

?
HUWWW

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

在過(guò)濾器承諾數(shù)組的情況下出現(xiàn)相同的錯(cuò)誤:


const promises = ids.map((id) => <some BE API call>);

const resolvedPromises = await Promise.allSettled(promises);

resolvedPromises.filter(({ status }) => status === 'fulfilled').map((p) => p.value);

錯(cuò)誤截圖

問(wèn)題是allSettledreturns PromiseSettledResult,它根本沒(méi)有導(dǎo)出(我在 lib.es2020.promise 中使用tsconfig):


interface PromiseFulfilledResult<T> {

    status: "fulfilled";

    value: T;

}


interface PromiseRejectedResult {

    status: "rejected";

    reason: any;

}


type PromiseSettledResult<T> = PromiseFulfilledResult<T> | PromiseRejectedResult;

并且.map不明白所有的rejected承諾都在filtered方法中被過(guò)濾了。


所以,我什至無(wú)法導(dǎo)入類(lèi)型并將值轉(zhuǎn)換為它們。


作為臨時(shí)解決方案,我用注釋抑制了 ESLint 和 TSC 規(guī)則:


  // eslint-disable-next-line @typescript-eslint/ban-ts-comment

  // @ts-ignore

然后我PromiseFulfilledResult在項(xiàng)目中創(chuàng)建了相同的接口并使用了類(lèi)型轉(zhuǎn)換:


resolvedPromises.filter(({ status }) => status === 'fulfilled').map((p) => (p as PromiseFulfilledResult).value);

結(jié)果我擺脫了 on error 和 ESLint/TS rules ignoring comments。


查看完整回答
反對(duì) 回復(fù) 2023-02-17
?
弒天下

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

你只有一個(gè)狀態(tài)滿(mǎn)足的值屬性,而你沒(méi)有檢查它。


所以使用我自己的例子,它可以固定如下:


const p1 = Promise.resolve(50); 

const p2 = Promise.resolve(100); 


const promiseArray = [p1, p2]; 

  

Promise.allSettled( promiseArray ). 

  then( results => results.forEach( result =>  

    console.log(result.status,

                result.status === 'fulfilled' && result.value

    );

  ));

它現(xiàn)在驗(yàn)證承諾是否已實(shí)現(xiàn),然后打印值(如果是的話(huà))。


查看完整回答
反對(duì) 回復(fù) 2023-02-17
?
qq_花開(kāi)花謝_0

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

如果在調(diào)用該方法后進(jìn)行類(lèi)型聲明,則可以避免此錯(cuò)誤allSettled。例如,您可以立即為打字稿輸入一個(gè)類(lèi)型,如下所示:


const promises = await Promise.allSettled([

  fetch(url).then((response) => response.json()),

  fetch(url).then((response) => response.json()),

]) as {status: 'fulfilled' | 'rejected', value: SomeType}[];

之后它將正常工作:


const resolvedPromises = promises.filter(({ status }) => status === 'fulfilled');

const responses = resolvedPromises.map((promise) => promise.value);


查看完整回答
反對(duì) 回復(fù) 2023-02-17
?
開(kāi)心每一天1111

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

您可以只鍵入 cast 的結(jié)果Promise.allSettled,例如:


const [

      someData,

      otherData

    ] = (await Promise.allSettled([

      this.someRepository.count(),

      this.otherRepository.count(),

    ])) as PromiseFulfilledResult<number>[];


 // will verify the promises, but ts doesn't get it

 this.verify(someData, otherData)


 console.log(otherData.value) // ts is okay

Number 是從 promise 返回的類(lèi)型,如果你想用不同的類(lèi)型輸入 promises,你也可以使用[PromiseFulfilledResult<number>, PromiseFulfilledResult<string>]


查看完整回答
反對(duì) 回復(fù) 2023-02-17
  • 4 回答
  • 0 關(guān)注
  • 841 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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