}" ne se résout-il pas? - Retrouvez les réponses et les commentaires concernant cette question" />
3
votes

Pourquoi "Promise {}" ne se résout-il pas?

J'essaie de récupérer des données depuis l'API Storm Glass. J'utilise leur modèle de requête Fetch ( https://docs.stormglass.io/?javascript# point-request ).

Quand j'exécute le script, la console lit indéfiniment " Promise {} ". Donc, la demande ne renvoie pas de valeur mais je ne peux pas comprendre pourquoi. Des idées?

J'ai remplacé ma clé API par

const http = require('http')
const fetch = require('isomorphic-fetch');

http.createServer((req, res) => {

////////////////////////////////////////////////App code
const lat = 58.7984;
const lng = 17.8081;
const params = 'waveHeight,airTemperature';

fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}&params=${params}`, {
  headers: {
    'Authorization': '<My API key>'
  }
}).then(function(response) {
  // Do something with response data.
  const jsonData = response.json();
  console.log(jsonData)
});

/////////////////////////////////////////////////////////
}).listen(3000);

console.log("service running on http://localhost:3000");


0 commentaires

3 Réponses :


5
votes

La fonction response.json renvoie une Promise, pas l'objet désérialisé. Votre code doit lire:

fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}&params=${params}`, {
  headers: {
    'Authorization': '<My API key>'
  }
})
.then(response => response.json())
.then(function(jsonData) {
  // Do something with response data
  console.log(jsonData)
});


1 commentaires

Doit également vérifier response.ok ou response.status si vous voulez attraper un statut non 200



1
votes

En marge de la réponse de gretro, vous avez peut-être eu l'idée que const json = response.json () fonctionnerait en regardant le code async / très similaire, alors voici à quoi pourrait ressembler ce code s'il était écrit de cette façon. Il est traditionnellement enveloppé dans un try / catch , donc je l'ai également inclus.

http.createServer(async (req, res) => {

  const lat = 58.7984;
  const lng = 17.8081;
  const params = 'waveHeight,airTemperature';

  try {
    const endpoint = `https://api.stormglass.io/point?lat=${lat}&lng=${lng}&params=${params}`;
    const params = { headers: { 'Authorization': '<My API key>' } };
    const response = await fetch(endpoint, params);
    const jsonData = await response.json();
    console.log(jsonData);
  } catch (err) {
    console.error(err);
  }

}).listen(3000);


0 commentaires

0
votes

Vous pouvez résoudre la promesse en utilisant async / await.

fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}&params=${params}`, {
  headers: {
    'Authorization': '<My API key>'
  }
})
.then(async response => {
    const jsonData = await response.json();
    console.log(jsonData)
})


0 commentaires