Для того чтобы вернуть значение из метода `result`, который использует асинхронный код, нужно использовать промисы. Ваш метод `result` должен возвращать объект промиса, чтобы вы могли обрабатывать результат после его получения.
Вот переписанный код вашего класса:
```javascript
class Ajax {
result(data) { // (1)
// Возвращаем промис из метода result
return this.load(data).then((v) => {
return v; // возвращаем значение, полученное из load
});
}
async load(url) { // (2)
try {
let f = await fetch(url);
if (!f.ok) {
throw new SyntaxError("Файл отсутствует"); // (*)
}
let json = await f.json();
if (Object.keys(json.result).length == 0) {
throw new SyntaxError("Данные отсутствуют: выборка пустого запроса"); // (*)
}
return json;
} catch (er) {
alert(`Ошибка: ${er}`); // TypeError: failed to fetch
}
}
}
let ajax = new Ajax();
ajax.result('file.php').then(json => {
// Теперь json доступен здесь
console.log(json.data[0].name);
console.log(json.data[1].name);
}).catch(err => {
console.error("Произошла ошибка:", err);
});
```
**Основные изменения:**
1. Метод `result` теперь возвращает результат `this.load(data).then(...)`, который является промисом. Это позволяет `result` ожидать завершения загрузки данных.
2. В месте, где вызывается `result`, добавлен обработчик `then` для получения данных, как вы и хотели.
Теперь вы можете использовать запрашиваемые данные после загрузки, и они будут доступны внутри обработчика `then`. Это именно то, что вам нужно для работы с асинхронными вызовами в JavaScript.