Вернуть данные из Promise и сохранить их в переменной после вызова API - PullRequest
0 голосов
/ 26 октября 2019

Я довольно новичок в Promises и нашел здесь много примеров того, как получить доступ к фактическому значению, которое всегда делается с console.log. Но моя цель - сохранить результат в переменной и работать с ней.

getdata = () =>
  fetch(
    "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&outputsize=full&apikey=demo"
  )
    .then(response => {
      if (response.status === 200) {
        return response.json();
      } else {
        throw new Error("This is an error");
      }
    })
    .then(data => {
      console.log(data);
    });

getdata();

Этот код работает. Можете ли вы помочь мне переписать это, что функция getdata() позволяет мне сохранить результат в переменной. Возврат не работает, так как я получу еще одно Обещание в ожидании.

Ответы [ 2 ]

2 голосов
/ 26 октября 2019

Вы можете сделать это следующим образом:

getdata = () =>
  fetch(
    "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&outputsize=full&apikey=demo"
  ).then(response => {
    if (response.status === 200) {
      return response.json();
    } else {
      throw new Error("This is an error");
    }
  });

getdata().then(data => {
  //I can do whatever with data
});

Конечно, вы также захотите обработать сценарий, когда запрос не удался, поэтому вы также можете связать .catch(). В качестве альтернативы, если у вас настроен процесс сборки, вы можете использовать async и await, чтобы вы могли сделать:

try {
  const data = await getdata();
} catch(err) {
}

Это должно быть в функции, помеченной как async

0 голосов
/ 26 октября 2019

Ну, сначала нам нужно объявить переменную, скажем, temp. Затем используйте API выборки для запроса нашего запроса с URL. Если состояние сервера равно 200, он вернет обещание, нам нужно использовать метод then, передавая любой аргумент (res, response, r что угодно ...), а затем функцию жирной стрелки (=>), чтобы мы моглисделать ответ в формате JSON. После этого нам нужно использовать другой метод then, чтобы вернуть вывод json и присвоить значение нашей объявленной временной переменной.

Но если есть какая-либо ошибка, такая как 500, 400, 404 ошибка сервера, нам нужно использоватьcatch метод с аргументом err и его консоль.

let temp;

fetch('https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&outputsize=full&apikey=demo')
    .then(res => res.json())
    .then(data => temp = data)
    .catch(err => console.log(err));
...