Menemukan sumber penolakan janji yang tidak tertangani: TypeError: Siklus rantai terdeteksi untuk janji

11

Saya mencoba mencari sumber penolakan yang tidak ditangani dari Janji di Node.js

Saya sudah mencoba memutakhirkan ke Node versi 12, menggunakan --async-stack-tracesopsi, dan mendengarkannya menggunakan:

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

Tapi saya masih tidak melihat jejak tumpukan membantu untuk membantu saya menemukan pelakunya!

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)

Menjalankan Node v10.10.0

d -_- b
sumber
Apakah ada banyak janji?
Prabhjot Singh Kainth
4
Kesalahan dalam kode Anda adalah rantai siklik, seperti yang Anda miliki dengan const cyclic = Promise.resolve().then(()=>cyclic);, jadi jangan mencari penolakan janji yang tidak tertangani, ini ada dalam kode internal node.
Kaiido
1
Beberapa kode yang mengangkat masalah akan sangat membantu.
x00
menjalankan npm i bluebirddan menambah const Promise = require('bluebird')kode dapat memberikan Anda pesan kesalahan yang lebih rinci
n3ko
coba jalankan node dengan --trace-warnings, penolakan tidak tertangani disertai dengan peringatan yang dapat Anda lacak
Karen Grigoryan

Jawaban:

2

Jika Anda melewatkan stacktrace yang bermanfaat, Anda bisa membuat simpul membuat yang baru dengan melemparkan kembali kesalahan Anda di handler Anda seperti ini:

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

Dengan cara ini, Anda harus dapat melacak pelakunya.

Gomino
sumber
Saya hanya mencoba lagi di pihak saya, dan itu pasti berhasil.
Gomino
@ d -_- b Anda sudah bisa menguji ini di sisi Anda?
Gomino
Hai @ Google, ya sayangnya itu tidak berhasil dalam skenario saya tapi saya menghargai bantuan Anda di sini!
d -_- b
0

terima kasih untuk semua sarannya. Saya sudah mencoba sekali lagi dengan memutakhirkan ke Node terbaru12.14.1 dan akhirnya bisa membuatnya menampilkan jejak stack:

Saya digunakan node --async-stack-traces myScript.jsbersama dengan:

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

Dan itu melacak kesalahan.

d -_- b
sumber
Tidakkah simpul 12 mencatat alasan penolakan yang tidak tertangani bahkan tanpa event handler itu?
Bergi
Bukankah Anda sudah mencoba solusi yang saya sediakan?
Gomino
-1

Untuk menemukan beberapa jejak stack yang baik untuk kode ini const cyclic = Promise.resolve().then(() => cyclic); saya memasukkan kode ini ke dalam fileprromise_cycle.js dan dijalankan dengan inspektur untuk men-debug itu.

Saya debug di Chrome DevTools dengan bendera Pause on caught exceptionsdiaktifkan, dan kemudian saya bisa melihat jejak seluruh tumpukan dengan file saya di atasnya

masukkan deskripsi gambar di sini

Łukasz Szewczak
sumber