React.JS = Promise / Fetch API имеет повторяющийся код, как я могу объединить в свою собственную функцию - PullRequest
0 голосов
/ 19 мая 2018

Я работаю над небольшой программой в React.JS.Я использую Promise и Fetch API для получения контента из нескольких текстовых файлов.Я столкнулся с проблемой - многие мои функции имеют одинаковую начальную часть, которая вызывает API, а затем сохраняет данные в массивы.Единственные отличающиеся части - это то, как я манипулирую массивами в каждой функцииЯ пытался выяснить, как я могу извлечь первую часть каждой функции в ее собственную функцию, чтобы избежать повторения.

Но моя проблема в том, как я могу сделать массивы глобальными, чтобы я мог получить доступ ких в других функциях?

Вот мои две функции - любые предложения приветствуются.

App.js

getFirstFunc = async (e) => { 
  Promise.all([
    fetch(firstFile).then(x => x.text()),
    fetch(secondFile).then(x => x.text())
    ]).then(allResponses => {
      let firstArray = allResponses[0];
      let secondArray = allResponses[1];
      let results = []
      for (let i = 0; i < firstArray.length; i++) {
        for (let j = 0; j < secondArray.length; j++ ) {
          // code for first function
          }
        }
      })
    }
  getSecondFunc = async (e) => {
    Promise.all([
    fetch(firstFile).then(x => x.text()),
    fetch(secondFile).then(x => x.text())
    ]).then(allResponses => {
      let firstArray = allResponses[0];
      let secondArray = allResponses[1];
      let results = []
      for (let i = 0; i < firstArray.length; i++) {
        for (let j = 0; j < secondArray.length; j++ ) {
          // code for second function
          }
        }
      })
    }

1 Ответ

0 голосов
/ 19 мая 2018

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

let results = []; 
Promise.all([
  fetch(firstFile).then(x => x.text()),
  fetch(secondFile).then(x => x.text())
]).then(allResponses => {
  let firstArray = allResponses[0];
  let secondArray = allResponses[1];
  for (let i = 0; i < firstArray.length; i++) {
    for (let j = 0; j < secondArray.length; j++ ) {
      results.push([firstArray[i], secondArray[j]]);
    }
  }
}).resolve()
...