विचार करें कि मैं redux async क्रिया का उपयोग करके एक बहुत ही सामान्य एपीआई कॉल कर रहा हूँ। परिणाम के संबंध में एक "INIT" प्रेषण और या तो "SUCCESS" या "FAILURE" है।

क्या "INIT" प्रेषण को try catch ब्लॉक में डालने से कोई फर्क पड़ता है?

विकल्प A (try catch ब्लॉक के बाहर):

export const doSomething = data => async dispatch => {
  dispatch(doSomethingInit()) // <-- outside try block
  try {
    let response = await client.get("/api")
    if (response) {
      dispatch(doSomethingSuccess(response.data))
    }
  } catch (error) {
    dispatch(doSomethingFailure(error))
  }
}

विकल्प बी (try catch ब्लॉक के अंदर):

export const doSomething = data => async dispatch => {
  try {
    dispatch(doSomethingInit()) // <-- inside the try block
    let response = await client.get("/api")
    if (response) {
      dispatch(doSomethingSuccess(response.data))
    }
  } catch (error) {
    dispatch(doSomethingFailure(error))
  }
}

मैं कहूंगा कि यह सिर्फ एक सूक्ष्म अनिवार्य विवरण है, हालांकि मैं इसके बारे में सोचने में एक मिनट खर्च करता हूं, लगभग हर बार जब मैं एक नई एसिंक क्रिया लिखता हूं ...: /

2
HynekS 18 अक्टूबर 2020, 21:11

1 उत्तर

सबसे बढ़िया उत्तर

मैं आमतौर पर यह सोचने से बचता हूं कि चीजें throw नहीं होंगी।

क्या होगा अगर यह फेंकता है? कौन सा कोड इसे संभालने जा रहा है? आपके पास एक बाहरी try-catch ब्लॉक हो सकता है, लेकिन अब doSomething के दौरान जो कुछ हुआ, उसे कहीं और संभाला जा रहा है।

मुझे लगता है कि चूंकि आपका कार्य/थंक doSomething के लिए "कोशिश" कर रहा है, इसलिए इसे अपने जीवन चक्र के दौरान होने वाली किसी भी चीज को कोशिश करने और पकड़ने के लिए जिम्मेदार होना चाहिए। भले ही, सिद्धांत रूप में, उस समय ऐसा नहीं होगा।

इसलिए मैं आमतौर पर विकल्प B के साथ जाता हूं।

export const doSomething = data => async dispatch => {
  try {
    dispatch(doSomethingInit()) // <-- inside the try block
    let response = await client.get("/api")
    if (response) {
      dispatch(doSomethingSuccess(response.data))
    }
  } catch (error) {
    console.error(error);                   // YOU MIGHT LOG IT HERE
    dispatch(doSomethingFailure(error))
  }
}

मुझे यह भी लगता है कि कोड try-catch ब्लॉक के अंदर सब कुछ के साथ बेहतर पढ़ता है।

1
cbdeveloper 19 अक्टूबर 2020, 16:25