Как вернуть результат после получения? - PullRequest
0 голосов
/ 29 августа 2018

Задача - сделать асинхронный запрос к API изображений (pixabay) и вернуть данные. Я пытаюсь сделать это с помощью fetch, я прав? Но в этом случае я получаю пустое возвращаемое значение. Что я могу с этим сделать?

function myfunc(){
  fetch(URL).then(function(response) {
      return response.json();
  }).then(function(hitsJSON) {
      hitsJSON.hits.forEach(item => {
          let resultItem = {
              id: item.id,
              url: item.previewURL,
              tags: item.tags
          }
          results.push(resultItem);
      });
  });
  return {
      query: query,
      images: results
  };
 }

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете вернуть результат запроса на получение, расширив способ использования обещаний в myfunc().

Обычный подход - вернуть обещание, созданное fetch(), из myfunc(). Таким образом, когда вы вызываете myfunc(), вы можете добавить обработчик функции к .then(), который будет выполнен (с результатом выборки) после того, как ваш запрос завершится:

function myfunc(){

  // Add return here to return the fetch's promise
  return fetch(URL).then(function(response) {
      return response.json();
  }).then(function(hitsJSON) {

      var results = []

      hitsJSON.hits.forEach(item => {
          let resultItem = {
              id: item.id,
              url: item.previewURL,
              tags: item.tags
          }
          results.push(resultItem);
      });

      // Return result here when request is complete
      return {
          query: 'query',
          images: results
      };
  });
 }


 // Use myfunc() like this:    
 myfunc().then( function( results ) {

   console.log(results)

 })
...