मुझे निम्न त्रुटि मिल रही है:

Houston we got an err at getGames in index.js
(node:72197) UnhandledPromiseRejectionWarning: #<Object>
(node:72197) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:72197) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
error at getGames rp

यहाँ प्रासंगिक कोड है:

एपीआई से डेटा प्राप्त करने के लिए सहायक कार्य (आरपी ​​अनुरोध-वादा-मूल है)

const getGames = async () => {
   return await rp(`https://api.steampowered.com/IDOTA2Match_570/GetTopLiveGame/v1?key=${KEY}&partner=0`)
   .catch(err => console.log('error at getGames rp'))
   .error(err => console.log('actual error at getGames rp'))
}

मैं इसे हर 5 सेकंड में कॉल करता हूं

app.get('/api/update', async (req, res) => {
  const data = await getGames()
  .catch(err => console.log('Houston we got an err at getGames in index.js'))
  const dataJson = JSONbig.parse(data);

  if (dataJson.game_list && dataJson.game_list.length) {
    for (let i = 0; i < dataJson.game_list.length; i++) {
      const game = dataJson.game_list[i];
...

'/ एपीआई/अपडेट' एंडपॉइंट हर 5 सेकंड में कॉल किया जाता है। मुझे उपरोक्त त्रुटि मिलती है। लूप के लिए मेरा पुनरावृति बंद हो जाता है। मैं चाहता हूं कि वह जिस पर त्रुटि कर रहा है उसे छोड़ दें, लेकिन यह कह रहा है कि मैं त्रुटि को संभाल नहीं रहा हूं। मेरे पास कैच ब्लॉक और यहां तक ​​​​कि त्रुटि ब्लॉक भी हैं और मुझे यह पता नहीं लग रहा है कि ऐसा क्यों हो रहा है।

मैंने मैन्युअल रूप से कॉल करने का भी प्रयास किया है:

`https://api.steampowered.com/IDOTA2Match_570/GetTopLiveGame/v1?key=${KEY}&partner=0`

डाकिया में कई बार त्वरित उत्तराधिकार में, लेकिन डाकिया कभी त्रुटि नहीं करता है। तो मुद्दा कहीं मेरे कोड में है। मैंने सभी त्रुटियों को संभाला है, इसलिए मुझे वह नहीं मिल रहा है जिसे मैं संभाल नहीं रहा हूं।

1
Noob 21 जिंदा 2020, 04:20

1 उत्तर

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

कुछ मुद्दे हैं:

  • केवल उस बिंदु पर पकड़ें जहां आप त्रुटि को वास्तव में संभाल सकते हैं। यहां, आप शायद केवल .get कॉलबैक में पकड़ना चाहते हैं (अन्यथा, यदि आप .catch getGames में हैं, तो आप एक हल किया हुआ वादा वापस करेंगे, एक अस्वीकृत वादा नहीं)

  • जब कोई त्रुटि होती है, तो डेटा को पार्स करने का प्रयास न करें (क्योंकि यह पॉप्युलेट नहीं होगा) - इसे पार्स करने और पुनरावृति करने का प्रयास करने से अधिक त्रुटियां होंगी

  • एक async फ़ंक्शन होने का कोई मतलब नहीं है जिसमें केवल एक await है जो तुरंत वापस आ जाता है

const getGames = () => {
  return rp(`https://api.steampowered.com/IDOTA2Match_570/GetTopLiveGame/v1?key=${KEY}&partner=0`);
};

app.get('/api/update', async (req, res) => {
  const data = await getGames()
    .catch(err => {
      console.log('Houston we got an err at getGames in index.js');
      // handle error
    });
  if (!data) {
    // There was an error
    return;
  }
  const dataJson = JSONbig.parse(data);
  // rest of the code
});
1
CertainPerformance 21 जिंदा 2020, 04:25