Я пытаюсь найти источник необработанного отказа от Promise в Node.js
Я попытался обновить до Node версии 12, используя --async-stack-traces
опцию, и прослушал их, используя:
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)
Работающий узел v10.10.0
javascript
node.js
promise
v8
d -_- б
источник
источник
const cyclic = Promise.resolve().then(()=>cyclic);
, поэтому не ищите необработанное отклонение обещания, это во внутреннем коде узла.npm i bluebird
и добавлениеconst Promise = require('bluebird')
в код может дать вам более подробное сообщение об ошибке--trace-warnings
, необработанные отклонения сопровождаются предупреждениями, которые вы можете отследитьОтветы:
Если вы пропустили полезную трассировку стека, вы можете заставить узел создать новый, повторно выдав свою ошибку в ваш обработчик следующим образом:
Таким образом, вы сможете найти виновного.
источник
спасибо за все предложения. Я попытался еще раз, обновившись до последней версии Node,
12.14.1
и наконец смог заставить его показать трассировку стека:Я использовал
node --async-stack-traces myScript.js
в сочетании с:И это выследило ошибку.
источник
Чтобы найти хорошую трассировку стека для этого кода,
const cyclic = Promise.resolve().then(() => cyclic);
я поместил этот код в файлprromise_cycle.js
и запустил инспектор для его отладки.Я отлаживаю его в Chrome DevTools с
Pause on caught exceptions
включенным флагом , а затем вижу всю трассировку стека с моим файлом на немисточник