d3.queue не дает вывод - PullRequest
       17

d3.queue не дает вывод

1 голос
/ 02 мая 2020

Это страница Я пытаюсь сделать ее динамической c, включив перекрестную фильтрацию. Таким образом, дело в том, что у них несколько API.

Для первых первых двух: TOTAL CASES & DAILY CASES Они используют этот API , а третий в топе основан на это API .

Три нижние AGE, GENDER и NATIONALITY взяты из этого API .

Во всем API распространена одна вещь - дата но есть некоторые API, в которых некоторые данные отсутствуют для нескольких дат, например, есть пробел (Недоступно для некоторых дат).

Поэтому я подумал объединить весь API JSON с точки зрения дат а затем разрешить перекрестную фильтрацию, потому что я считаю, что могу включить перекрестную фильтрацию между ними. Поправь меня, если я ошибаюсь.

Like Если я нажму на пол женщины, так как он дает информацию об общем количестве случаев, когда пациент был женщиной, поэтому только подтвержденные случаи из общего числа изменится, а не восстановленные, смерти, так как данные недоступны. Так что я думаю, что я должен объединить три верхних чарта вместе и пол, возраст и национальность чарты вместе. Тогда D c js сможет хорошо выполнять фильтрацию между каждым сегментом (случаи, связанные с ориентиром, случаи, связанные с информацией о человеке).

Строка 123:

var log = console.log; 

var q = queue()
    .defer(d3.json, "https://api.covid19india.org/data.json")
      .defer(d3.json, "https://api.rootnet.in/covid19-in/unofficial/covid19india.org/statewise/history");

    q.await(function(error, data1, data2) {
      log("==========>");
    log("data1:", error,data1);
    log("data2:", data2);
});

Это не работает, потому что я не вижу console.log() вывод.

https://blockbuilder.org/ninjakx/8c48ab6481311aa0452046d66c4d8701

Итак, мои вопросы:

1) Почему не работает d3.queue?

2) Предлагает ли объединить все данные вместе и разрешить заливку, или нет, так как данные ограничены. Должен ли я go для перекрестной фильтрации между одними и теми же графиками API. Так что в этом случае у меня будет 2 сегмента (случаи, связанные с ориентиром, случаи, связанные с информацией о человеке). Используя D C js, я хочу сделать его более интерактивным и отображать больше информации.

1 Ответ

1 голос
/ 05 мая 2020

d3.queue устарел

Ответ на ваш первый вопрос - "вырезан и высушен": вам не нужен d3.queue, и он был устарел и удален в d3@5.

Начиная с d3@5, API загрузки данных D3 используют обещания ES6 вместо асинхронных обратных вызовов, поэтому вы можете использовать Promise.all([...]) вместо d3.queue. По-видимому, нет способа заставить новый API генерировать ошибки при вызове по-старому, поэтому он просто молча терпит неудачу. : - /

Новый способ написания вашего кода:

Promise.all([
  d3.json("https://api.covid19india.org/data.json"),
  d3.json("https://api.rootnet.in/covid19-in/unofficial/covid19india.org/statewise/history")
]).then(([data1,data2]) => {
    log("==========>");
    log("data1:", data1);
    log("data2:", data2);
})
.catch(error => log('error', error))

Я считаю, что это намного легче читать и понимать. Приятным побочным эффектом является то, что если вы пренебрегаете обработкой ошибок (как и большинство людей), вы автоматически получите четкое сообщение в журнале.

Рабочая ветвь вашего блока .

Объединение нескольких наборов данных

Ваш второй вопрос довольно открытый, возможно, было бы лучше перенести его в d c. js группу пользователей ?

В общем, сложно провести перекрестную фильтрацию более чем одного набора данных. У вас будет более одной группы диаграмм, которые будут перерисовывать aws вместе, и вам придется вручную добавлять обработчики на одну диаграмму, чтобы запускать, очищать фильтры и перерисовывать другую группу диаграмм.

Я не видел слишком много панелей, которые делают это. Вы должны прояснить пользователям, что происходит.

...