Как получить доступ к дате в следующем .then () - получить API - PullRequest
0 голосов
/ 08 января 2020

Интересно, есть ли способ получить доступ к данным с этого момента? Код выглядит следующим образом:

fetch(`http://localhost:3003/users/${userObject.id}`)
        .then(res => res.json())
        .then(user => {
          ...
        })
        .then(???) 

и через секунду я получаю всю необходимую информацию о пользователе. Когда я помещаю все в секунду, тогда это работает, но код очень запутанный и повторяющийся, и я хотел бы включить некоторые вещи в работу. К сожалению, в этом случае у меня нет доступа к некоторым данным ...

Есть идеи? Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы можете передать аргумент следующему обещанию, вернув его из предыдущего.

fetch(`http://localhost:3003/users/${userObject.id}`)
        .then(res => res.json())
        .then(user => {
          return user.id;
        })
        .then(userId => {
          console.log('user id is:', userId);
        });

Кроме того, вы можете достичь sh того же результата, используя асинхронное c программирование, как показано ниже:

async function fetchSomeData() {
  var res = await fetch(`http://localhost:3003/users/${userObject.id}`);
  var user = await res.json();

  return user;
}

fetchSomeData().then(user => {
  console.log('user id is:', user.id)
});
1 голос
/ 08 января 2020

, но код очень запутанный и повторяющийся, и я хотел бы поместить некоторые вещи в функцию

Просто используйте async / await синтаксис , это гораздо более понятно.

(async() => {
    const request = await fetch(`http://localhost:3003/users/${userObject.id}`);
    const result = await request.json();

    // proceed to do whatever you want with the object....
})();

Это автоматически выполняемая функция, но вы также можете объявить это следующим образом:

const myFunc = async() => {
    const request = await fetch(`http://localhost:3003/users/${userObject.id}`);
    const result = await request.json();

    // your logic here or you can return the result object instead;
};

или даже без функций со стрелками:

const myFunc = async function() {
    const request = await fetch(`http://localhost:3003/users/${userObject.id}`);
    const result = await request.json();
    console.log(result.id);
};
...