Я только что начал использовать Flutures , и я пытаюсь получить некоторые удаленные данные для визуализации с помощью d3.
Я создал функцию, которая принимает селектор DOM (например, #my-chart
) и URL (например, https://example.com/data.json
).
Если при извлечении данных возникает ошибка, у меня есть унарная функция, которая показывает сообщение об ошибке. Если все идет хорошо, у меня есть унарная функция, которая рисует визуализацию. Для простоты предположим, что эти функции просто console.error
и console.log
.
const fn = async (selector, url) => {
// convert fetch (which returns a Promise) into a function that
returns a Future
const fetchf = Future.encaseP(fetch);
fetchf(url)
.chain(res => Future.tryP(_ => res.json()))
.fork(console.error, console.log);
}
Видимо, я что-то упускаю при переносе fetch
в Future, потому что я получаю это предупреждение:
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
Если бы мне пришлось использовать async/await
, я написал бы что-то вроде этого, что не дало бы мне никакого предупреждения.
const fn = async (selector, url) => {
let res;
try {
res = await fetch(url);
} catch (err) {
console.error(err);
return;
}
let data;
try {
data = res.json();
} catch (err) {
console.error(err);
return;
}
console.log(data);
};