Данные из URL-адреса выборки и использование этих данных в другой функции (Вопрос о области видимости)

#javascript #asynchronous #promise #scope #fetch

#javascript #асинхронный #обещание #область видимости #принести

Вопрос:

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

 async function getData(){
  const response = await fetch("URL");
  const data = await response.json();
  return data;
}

// My JSON file is an Object with a key:value pairing.
// "Array": [array of stuff]
// I want to get one of the values from the [array of stuff].

// Since getData() returns data as Promise, I have to use .then() to access it, right?
// This example below console logs the first index of the array within my JSON Object.
// That works fine, but when I try to use "return", it doesn't do anything.
// It just says "Promise {<pending>}".
getData().then(data=> console.log(data["Array"][0]));

// Obviously I shouldn't be using console.log, but using return doesn't do anything...

// Here I will use the data from the above getData() function in another function below.
function doSomething(){
  // Do something with data["Array"][0]
}  

Что, если я хочу использовать значение из my .then() в другой функции? Как мне это сделать?
Я предполагаю, что я пытаюсь сказать, как мне использовать данные из моей асинхронной функции в другой отдельной функции?
Масштабы сбивают меня с толку…

Комментарии:

1. Если вы не хотите console.log этого, просто doSomething(data.Array[0]) с этим?

Ответ №1:

Вы можете передать его в качестве аргумента этой другой функции.

В вашем примере

 async function getData(){
  const response = await fetch("URL");
  const data = await response.json();
  return data;
}

function doSomething(data) {
  // here you do something with data
  console.log(data)
}

getData().then(doSomething)  

Асинхронная функция возвращает обещание.
Обещание может находиться в одном из трех состояний — ожидающее, разрешенное или отклоненное.

Promise.then() принимает два аргумента — обратные вызовы — функции. Эти функции будут вызваны, когда обещание будет разрешено или отклонено. Первый из них основан на решимости. Promise передает результат в качестве аргумента этой функции.

В приведенном выше примере вы передаете doSomething как функцию, которая будет вызвана обратно при getData() разрешении.

Вы можете прочитать больше об обещаниях здесь

А также об асинхронности / ожидании здесь