अनहेल्दी वादा अस्वीकृति का स्रोत खोजना: टाइपर्र: वादे के लिए खोजा गया चक्र


11

मैं Node.js में एक प्रॉमिस से अनहेल्ड रिजेक्शन के स्रोत को खोजने की कोशिश कर रहा हूं

मैंने --async-stack-tracesविकल्प का उपयोग करते हुए नोड 12 संस्करण में अपग्रेड करने की कोशिश की है, और उनका उपयोग करते हुए सुन रहा हूं:

process.on("unhandledRejection",( reason, promise ) => {
  console.log(reason);
  console.log(promise);
});

लेकिन मुझे अभी भी अपराधी को खोजने में मदद करने के लिए कोई उपयोगी स्टैक ट्रेस नहीं दिख रहा है!

UnhandledPromiseRejectionWarning: TypeError: Chaining cycle detected for promise #<Promise>
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:89675) 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: 11)

Node v10.10.0 चल रहा है


क्या कई वादे हैं?
प्रभजोत सिंह कायथ

4
आपके कोड में त्रुटि एक चक्रीय अस्तर है, जैसा कि आप के साथ होगा const cyclic = Promise.resolve().then(()=>cyclic);, इसलिए अनहेल्ड वादा अस्वीकृति की खोज न करें, यह नोड के आंतरिक कोड में है।
काइदो

1
समस्या को बढ़ाने वाला कुछ कोड मददगार होगा।
x00

कोड को चलाना npm i bluebirdऔर जोड़ना const Promise = require('bluebird')आपको एक अधिक विस्तृत त्रुटि संदेश दे सकता है
n3ko

नोड के साथ चलाने की कोशिश करें --trace-warnings, अनहेल्ड रिजेक्शन चेतावनी के साथ हैं जिन्हें आप ट्रेस कर सकते हैं
करेन ग्रिगोरीयन

जवाबों:


2

यदि आप एक सहायक स्टैकट्रेस को याद करते हैं, तो आप नोड को इस तरह से अपने हैंडलर में अपनी त्रुटि को फिर से फेंककर नया बना सकते हैं:

process.on('unhandledRejection', (reason, p) => { throw reason });

इस तरह, आपको अपराधी को ट्रैक करने में सक्षम होना चाहिए।


मैं बस फिर से अपनी तरफ से कोशिश करता हूं, और यह निश्चित रूप से काम करता है।
गोमिनो

@d -_- b क्या आप इसे अपनी तरफ से परख पाए हैं?
गोमिनो

हाय @Gino, हाँ दुर्भाग्य से यह मेरे परिदृश्य में काम नहीं किया, लेकिन मैं यहाँ आपकी मदद की सराहना!
d -_- b

0

सभी सुझावों के लिए शुक्रिया। मैंने नवीनतम नोड में अपग्रेड करके एक बार और प्रयास किया है 12.14.1और अंत में स्टैक ट्रेस दिखाने के लिए इसे प्राप्त करने में सक्षम था:

मैं node --async-stack-traces myScript.jsके साथ संयोजन के रूप में इस्तेमाल किया :

process.on('unhandledRejection', (reason, p) => {
  console.log(reason);
});

और यह त्रुटि को ट्रैक करता है।


क्या नोड 12 उस इवेंट हैंडलर के बिना भी अस्वीकार किए गए अस्वीकृति कारण को लॉग नहीं करता है?
बरगी

क्या आपने भी मेरे द्वारा दिए गए समाधान की कोशिश नहीं की है?
गोमिनो

-1

इस कोड के लिए कुछ अच्छे स्टैक ट्रेस को खोजने के लिए const cyclic = Promise.resolve().then(() => cyclic); मैंने इस कोड को फ़ाइल में डाला prromise_cycle.jsऔर इसे डीबग करने के लिए इंस्पेक्टर के साथ चला।

मैंने Chrome DevTools पर ध्वज Pause on caught exceptionsसक्षम के साथ डीबग किया , और फिर मैं उस पर अपनी फ़ाइल के साथ पूरे स्टैक ट्रेस देख सकता हूं

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.