कैसे उपयोग करने के लिए वादा।
टाइपस्क्रिप्ट बिल्ड विफल हो रहा है क्योंकि ऐसा प्रतीत नहीं होता है, Promise.allSetttledभले ही मैंने ts कॉन्फिग कॉम्पीलेरेशंस सेट किए हों"lib": [ "ES2020.Promise" ],
ऐसा लगता है जैसे प्रतिक्रिया के लिए promise.allSettledशामिल नहीं है resultया reason।
टाइपस्क्रिप्ट बिल्ड बनाते समय मुझे निम्न त्रुटि मिलती है:
Property 'reason' does not exist on type 'PromiseSettledResult<IMyPromiseResult>'.
तथा
Property 'value' does not exist on type 'PromiseRejectedResult'.
मेरे कोड ब्लॉक इस तरह दिखता है और जैसा कि आप देख सकते हैं, मैं का उपयोग करने की कोशिश कर रहा हूँ reasonऔर resultवादों कि हल की eaech से।
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 घोषणा को कैसे अपडेट कर सकता हूं?
जवाब
जैसे बर्गी ने उल्लेख किया है कि टाइपस्क्रिप्ट पता नहीं है कि क्या प्रकार है PromiseFulfilledResult/ PromiseRejectedResultजब जाँच प्रकार।
एक ही तरीका है कि आप वादे को पूरा करें। यह किया जा सकता है क्योंकि आपने पहले से ही सत्यापित किया है कि हल किया गया वादा या तो पूरा हो गया है या अस्वीकार कर दिया गया है।
इस उदाहरण को देखें:
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);
}
findकॉलबैक को टाइप गार्ड के रूप में परिभाषित करें , जो एक प्रकार की भविष्यवाणी लौटाता है:
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);
}
डेमो खेल का मैदान