#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()
разрешении.
Вы можете прочитать больше об обещаниях здесь
А также об асинхронности / ожидании здесь