извлекать в извлечении JavaScript - PullRequest
0 голосов
/ 09 апреля 2020

У меня проблема с получением данных JS. У меня есть 2 URL, первый выглядит так: «http://somewebsite.com/users», а второй URL: http://website.com/details/${user.login}. Я хочу объединить данные из URL-адресов и поместить их в массив. Мой код не работает.

async function dataFetch() {
  return await fetch("https://http://somewebsite.com/users")

  .then.forEach(async function(user){
    const resp= await fetch(`http://website.com/details/${user.login}`)
    const respJSON = resp.json();
    user.login= respJSON.json();
  })
  .then(x=>console.log(x))
}
---------------------------
Input:
data from first url:
[
  {"login":"xor","password":"1234"},
  {"login":"Ozark","password":"56789"}
]

data from second url:
[
  {"login":"xor","name":"Capri Cosa", "age": "33"},
  {"login":"Ozark","name":"Marg Arita", "age": "27"}
]
---------------------------

Output:
[
  {"login":"xor","password":"1234","name":"Capri Cosa", "age": "33"},
  {"login":"Ozark","password":"56789","name":"Marg Arita", "age": "27"}
]

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Итак, есть пара причин, по которым код не работает. Во-первых, вы не можете использовать .forEach() для .then(), поскольку .then() - это метод, а не свойство типа массива. Затем, когда вы используете .then() для использования метода .json(), вам нужно использовать его следующим образом:

.then(result => result.json())

, затем цепочку другого метода then.

Теперь для объединения двух содержимого Исходя из моего понимания того, какими должны быть ваши выходные данные, вы хотите, чтобы логин и пароли были в том же объекте, что и возраст и имя, что можно сделать так:

(function dataFetch() {
   let finalArray = [];

   fetch("https://somewebsite.com/users")
     .then(result => result.json())
     .then(result =>{
         fetch("https://somewebsite.com/${user.login}")
           .then(resp => resp.json())
           .then(resp => {
              for(let i = 0; i < resp.length; i++) {
                  finalArray.push({login: resp[i].login, name: resp[i].name, password: 
                  result[i].password, age: resp[i].age})
             }
         })

    })
    .then(() => {
       for(let i = 0; i < finalArray.length; i++) {
          console.log(finalArray[i]);
       }
   })
})();

Надеюсь, это поможет

0 голосов
/ 09 апреля 2020

Вы можете go для более простого подхода (вспомогательный метод, основанный на замыканиях)

function merger(){
    var data = []
    return function(url){
        return fetch(url).
                then(resp => resp.json()).
                then(resp => (data.push(resp), data))
    }
}

Это можно использовать так:

var urlMerge = merger()
urlMerge(<<url1>>).then(console.log)// [{<<first response>>}]
urlMerge(<<url2>>).then(console.log)// [{<<first response>>},{<<second response>>}]
urlMerge(<<url3>>).then(console.log)// [{<<first response>>},{<<second response>>},{<<third response>>}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...