@sentry/browser
@sentry/node
raven-js
raven-node
_ (raven para o nó) _5.10.2
Meu projeto geralmente detecta um erro como rejeição de promessa de evento sem erro capturada com as chaves: currentTarget, isTrusted, target, type, sem nenhuma informação útil. E um dado adicional é
__serialized__ = {
currentTarget: [object Null],
isTrusted: [Circular ~],
target: head > script[type="text/javascript"],
type: error
}
se parece com uma instância de evento. Com as informações limitadas, não sei onde esse bug foi acionado, alguém encontrou o mesmo problema?
Também começamos a ver isso nas últimas semanas. Eu só comecei a pesquisar isso, então não tenho mais detalhes sobre o que está causando isso.
O mesmo aqui, agora no Sentry v5.15.5.
Alguém pode fornecer algum link para este tipo de evento capturado no Sentry? Parece um erro de carregamento de script (observe o target
que este evento foi acionado)
@kamilogorek, você pode me enviar o e-mail da sua empresa? Posso compartilhar exemplos de eventos.
@Santas [email protected]
Se você precisar de mais exemplos, posso enviar alguns também @kamilogorek - é só me avisar.
@sheelah sim por favor
@sheelah não há muito que possamos melhorar aqui, para ser honesto. JS não nos dá mais informações do que já fornecemos. Sempre que uma instância de um objeto de promessa é rejeitada, ele dispara o evento onunhandledrejection
(o mesmo vale para onerror
na descrição do OP).
https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event
No entanto, não há nada que impeça alguém de passar qualquer coisa aleatória lá.
Assim, um código como este Promise.reject("whatever")
ou Promise.reject(jQueryBecauseWhyNot)
é um código JS totalmente válido.
Sempre que encontramos algo que não é um valor primitivo, um objeto que contém o rastreamento de pilha (por exemplo, Error
) ou exceção interna do DOM, temos que voltar para a serialização de objeto simples e tentar extrair todas as informações que pudermos. disso. Você pode ver o arquivo eventbuilder.ts
para obter uma lista de caminhos possíveis que esse "qualquer valor aleatório" passado ao manipulador de eventos pode seguir - https://github.com/getsentry/sentry-javascript/blob/master/packages/ navegador / src / eventbuilder.ts # L17 -L80
Infelizmente, não tenho certeza se podemos torná-lo mais genérico para lidar com mais tipos de entrada.
Se alguém tiver algum feedback sobre esse processo, estou totalmente aberto a sugestões.
(respondido aqui em vez de no seu e-mail, para manter a conversa pública para todos)
Das minhas observações:
ZXing
e browser-image-compression
, mas nenhum script de rastreamento de terceiros;ProgressEvent
, não apenas um evento - que parece ser uma parte da biblioteca de solicitação HTTP (estou usando axios).ADDITIONAL DATA
__serialized__ | {
currentTarget: [object Null],
isTrusted: [Circular ~],
target: [object FileReader],
type: error}
-- | --
Também acabei de receber um relatório com "Rejeição de promessa sem erro capturada com valor: nulo". Semelhante ao que @ anton-bot mencionou acima, o usuário afetado estava usando o Safari 13.1.2 no Mac OS X 10.15.6.
Dei uma olhada em meu código de aplicativo compilado para reject(
chamadas em que um objeto possivelmente null
é fornecido, mas não consegui encontrar nenhum, então queria saber se poderia ser uma extensão do navegador ou terceiro script de festa. Como não há rastreamento de pilha ou migalhas de pão, é muito difícil saber o que aconteceu exatamente.
Também tenho visto isso nas últimas duas semanas. Em nosso site, só vimos isso em páginas que usam a API JavaScript do Google Maps, então tenho a sensação de que pode estar relacionado a isso. Alguém mais está vendo isso em URLs que usam o Google Maps?
Editar: até agora, vimos o problema no iOS e Android
Editar: Dados adicionais:
{
currentTarget: [object Null],
isTrusted: [Circular ~],
target: head > script[type="text/javascript"],
type: error
}
@asbjornh nope, não tenho o Google Maps na minha página
@kamilogorek Os dados adicionais do OP (e os meus) seriam causados por algo como Promise.reject(new Event("error"))
? Ou os eventos do Sentry para essa situação sempre teriam cargas úteis que se pareciam com eventos do navegador?
@asbjornh sim, ele então passaria por este fluxo - https://github.com/getsentry/sentry-javascript/blob/caff9e7b308f99f04443d57d990c252a51a153bf/packages/browser/src/eventbuilder.ts#L97 -L107
Eu também estou recebendo o mesmo erro
Este erro esgotou minha capacidade de cota.
temos 289 eventos disso nas últimas 24h - e nossa página ainda nem está ao vivo ..
{
currentTarget: [object Null],
isTrusted: [Circular ~],
target: head > link,
type: error
}
Estamos usando next.js
o mesmo aqui com cra 😅
Parece que esse problema é causado por algo mais ou menos assim:
new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = src;
script.onload = resolve;
script.onerror = reject;
document.body.appendChild(script);
});
O gancho onerror
realmente receberá um objeto Event
, em vez de uma instância Error
, que está causando os problemas mencionados acima. Isso pode ser evitado envolvendo Event
com Error
conforme sugerido por https://developer.mozilla.org/de/docs/Web/API/HTMLScriptElement :
new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = src;
script.onload = resolve;
script.onerror = event => {
reject(new Error(`Failed to load ${event.target.src}`));
};
document.body.appendChild(script);
});
No meu caso, foi o mecanismo de pré-busca 9.5.2
Next.js causando isso no Firefox, apenas no caso de alguém ter um caso semelhante. (talvez aqui? https://github.com/getsentry/sentry-javascript/issues/2546#issuecomment-697771381) Este é o problema: https://github.com/vercel/next.js/pull/16757 e pode ser resolvido atualizando para 9.5.3
ou Canário.
O erro é muito mais detalhado no navegador:
Uncaught (in promise)
error
bubbles: false
...
...
as: "fetch"
assignedSlot: null
attributes: NamedNodeMap(3
0: href="/_next/data/wmQYPCwvbuBulJfEwTMRf/smartwatches/fitbit-ionic.json"
1: rel="prefetch"
2: as="fetch"
as: as="fetch"
href: href="/_next/data/wmQYPCwvbuBulJfEwTMRf/smartwatches/fitbit-ionic.json"
length: 3
rel: rel="prefetch"
...
...
isTrusted: true
originalTarget: <link href="/_next/data/wmQYPCwvbuBu…tches/fitbit-ionic.json" rel="prefetch" as="fetch">
returnValue: true
srcElement: <link href="/_next/data/wmQYPCwvbuBu…tches/fitbit-ionic.json" rel="prefetch" as="fetch">
target: <link href="/_next/data/wmQYPCwvbuBu…tches/fitbit-ionic.json" rel="prefetch" as="fetch">
timeStmp: 25366
type: "error"
...
Como podemos fazer com que o Sentry capture esses dados?
@ Turbo87 SIM! É exatamente por isso que só o vemos em páginas que usam @googlemaps/js-api-loader
. Eles estão fazendo exatamente o que você está descrevendo aqui
Obrigada!!
Comentários muito úteis
Este erro esgotou minha capacidade de cota.