Как мне разместить асинхронную переменную внутри синхронного l oop? - PullRequest
1 голос
/ 09 июля 2020

Идентификаторы переменных - это массив с разными идентификаторами электронных таблиц. Я обернул его вокруг запроса, потому что я хочу сделать то же самое с несколькими электронными таблицами, однако, оказавшись внутри запроса, идентификатор просто становится синхронным и остается последним элементом в массиве идентификаторов. Я хочу сделать так, чтобы идентификатор был асинхронным и изменялся, чтобы я мог выполнять запрос по нескольким идентификаторам.

for(var i = 0; i < num; i++) {
      var id = ids.slice(i, i+1);
      var params = {
        spreadsheetId: id,
        ranges: ['A3:L'],
        includeGridData: true,
      };

      var request = gapi.client.sheets.spreadsheets.get(branchParams);
      request.then(function(response) {
        console.log(id);

1 Ответ

2 голосов
/ 09 июля 2020

Попробуйте следующее:

const getSheets = (ids) => {
  return Promise.all(
    ids.map(id => {
      const params = {
        spreadsheetId: id,
        <...>
      }
      return gapi.client.sheets.spreadsheets.get(params)
    })
  )
}

Это вызовет api один раз для каждого идентификатора в вашем списке и вернет список ответов в обещании. Вы можете использовать эту функцию следующим образом:

const doStuffWithSheets = async () => {
  const ids = [1, 2, 3]
  const sheetResponses = await getSheets(ids);
  sheetResponses.forEach(response => {
    console.log(response)
  })
}

Некоторая документация для справки:

Promise.all(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

map() : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

асинхронный c функция: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

...