Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

682
Visualizações
¿Qué significan los corchetes dobles en javascript y cómo acceder a ellos?

Situación

Tengo la siguiente función que usa Promise .

 var getDefinitions = function() { return new Promise(function(resolve) { resolve(ContactManager.request("definition:entities")); }); } var definitions = getDefinitions()

El contenido de las definitions es:

 Promise { [[PromiseStatus]]: "resolved", [[PromiseValue]]: child }

Acceder a la propiedad PromiseValue directamente devuelve indefinido

 var value = definitions.PromiseValue; // undefined

Pregunta

¿Qué significan los corchetes dobles [[ ]] y cómo recupero el valor de [[PromiseValue]] .

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

¿Qué hay dentro [[]]

Mi pregunta es qué significan los corchetes dobles [[ ]] y cómo recupero el valor de [[PromiseValue]].

Es una propiedad interna. No se puede acceder directamente. Las promesas nativas solo se pueden then con promesas o de forma asíncrona en general; consulte Cómo devolver la respuesta de una llamada asíncrona . Citando la especificación:

Están definidos por esta especificación puramente con fines expositivos. Una implementación de ECMAScript debe comportarse como si produjera y operara con propiedades internas de la manera descrita aquí. Los nombres de las propiedades internas se encierran entre corchetes dobles [[ ]] . Cuando un algoritmo usa una propiedad interna de un objeto y el objeto no implementa la propiedad interna indicada, se lanza una excepción TypeError.

No se puede

Hablando en serio, ¿qué son?

¡Muy agradable! Como dice la cita anterior, solo se usan en la especificación, por lo que no hay razón para que aparezcan realmente en su consola.

No se lo digas a nadie, pero estos son símbolos realmente privados . La razón por la que existen es para que otros métodos internos puedan acceder a [[PromiseValue]] . Por ejemplo, cuando io.js decide devolver promesas en lugar de aceptar devoluciones de llamada, esto le permitiría acceder a estas propiedades rápidamente en los casos en que esté garantizado. No están expuestos al exterior.

¿Puedo acceder a ellos?

No, a menos que haga su propia compilación de Chrome o V8. Tal vez en ES7 con modificadores de acceso. A partir de ahora, no hay forma, ya que no son parte de la especificación y se romperán entre los navegadores, lo siento.

Entonces, ¿cómo obtengo mi valor?

 getDefinitions().then(function(defs){ //access them here });

Pero, ¿y si devuelve un error? En previsión de estos casos, agregue lo siguiente al final (y fuera) de su .then().

 .catch(function(defs){ //access them here });

Aunque si tuviera que adivinar, para empezar, no está convirtiendo la API correctamente, ya que esta conversión solo funcionaría en caso de que el método sea síncrono (en ese caso, no devuelva una promesa) o ya devuelva una promesa que hará se resolvió (lo que significa que no necesita la conversión en absoluto, solo return .

over 4 years ago · Santiago Trujillo Relatório

0

También entré en este problema hoy y encontré una solución.

Mi solución se ve así:

 fetch('http://localhost:3000/hello') .then(dataWrappedByPromise => dataWrappedByPromise.json()) .then(data => { // you can access your data here console.log(data) })

Aquí, dataWrappedByPromise es una instancia de Promise . Para acceder a los datos en la instancia de Promise , descubrí que solo necesitaba desenvolver esa instancia con el método .json() .

¡Espero que ayude!

over 4 years ago · Santiago Trujillo Relatório

0

Este ejemplo es con reaccionar, pero en su mayor parte debería ser lo mismo.

Reemplace this.props.url con su URL para buscar y hacer que funcione para la mayoría de los otros marcos.

Analizar el res.json() devuelve el [[promiseValue]]; sin embargo, si luego lo devuelve a otro método .then() a continuación, puede devolverlo como una matriz total.

 let results = fetch(this.props.url) .then((res) => { return res.json(); }) .then((data) => { return data; })
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda