İşlenmeyen söz reddinin kaynağını bulma: TypeError: Söz için zincirleme döngüsü algılandı


11

Node.js bir Promise işlenmeyen bir ret kaynağı bulmaya çalışıyorum

Düğüm sürüm 12'ye yükseltmeyi, --async-stack-tracesseçeneği kullanarak ve bunları kullanarak dinlemeyi denedim :

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

Ama yine de suçluyu bulmama yardımcı olacak herhangi bir yararlı yığın izi göremiyorum!

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)

Koşu Düğümü v10.10.0


Birden fazla söz var mı?
Prabhjot Singh Kainth

4
Hata senin sizinle olurdu gibi kod, bir halkalı zincirleme olduğunu const cyclic = Promise.resolve().then(()=>cyclic);, bu yüzden bir işlenmeyen söz reddi aramasanız bu bir düğümün iç kodunda olduğunu.
Kaiido

1
Sorunu yükselten bazı kodlar yardımcı olacaktır.
x00

çalıştırarak koda npm i bluebirdekleme const Promise = require('bluebird')size daha ayrıntılı bir hata mesajı verebilir
n3ko

düğümü çalıştırmayı deneyin --trace-warnings, işlenmeyen reddetmelere izleyebileceğiniz uyarılar eşlik eder
Karen Grigoryan

Yanıtlar:


2

Yararlı bir yığın izini kaçırırsanız, hatanızı işleyicinize şu şekilde yeniden atarak düğümün yeni bir tane oluşturmasını sağlayabilirsiniz:

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

Bu şekilde suçluyu takip edebilmelisiniz.


Sadece yanımda tekrar deniyorum ve kesinlikle işe yarıyor.
Gomino

@d -_- b bunu sizin tarafınızdan test edebildiniz mi?
Gomino

Merhaba @ Gomino, evet ne yazık ki benim senaryomda işe yaramadı ama burada yardımınız için teşekkür ederiz!
d -_- b

0

tüm öneriler için teşekkürler. Bir kez daha en son Düğüme yükselterek denedim 12.14.1ve sonunda yığın izini göstermeyi başardım :

Kullandığım node --async-stack-traces myScript.jsile bağlantılı olarak:

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

Ve hatayı izledi.


Düğüm 12, olay giderici olmasa bile işlenmeyen ret nedenini günlüğe kaydetmiyor mu?
Bergi

Sağladığım çözümü bile denemedin mi?
Gomino

-1

Bu kod için bazı iyi yığın izleme bulmak için bu kodu const cyclic = Promise.resolve().then(() => cyclic); dosyaya koymak prromise_cycle.jsve hata ayıklamak için müfettiş ile çalıştırın.

İşaret Pause on caught exceptionsetkinken Chrome DevTools'ta hata ayıkladım ve ardından dosyamdaki tüm yığın izlemesini görebiliyorum

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.