Как написать заявление forEach как Promise.all - PullRequest
0 голосов
/ 01 апреля 2020

Я работаю над обновлением карты d3. js с v3 до v5 и сталкиваюсь с проблемами с моим оператором forEach. Первоначально в версии v3 у меня была функция, которая создает словарь из моих данных CSV. Данные CSV имеют столбцы: id , кейсы и город . Моя функция была настроена так:

var promises = [
            d3.json("testdata/us.json"),
            d3.csv("testdata/county_dates.csv", function(d){
                cases.set(d.id, +d.cases);
            })
        ]

        Promise.all(promises).then(ready)

function ready(error, us, data) {
         var pairCaseWithId = {};
         var pairNameWithId = {};

data.forEach(function(d) {
        pairCaseWithId[d.id] = +d.cases;
        pairNameWithId[d.id] = d.city;
        });

Я сейчас обновляю код для использования d3 v5, который использует обещания, с которыми я не знаком. Как мне обновить строку forEach до promises.all? Я пробовал что-то вроде этого:

data.then(function (result){
            return Promise.all(result.map(function(d){
                 pairCaseWithId[d.id] = +d.cases;
                 pairNameWithId[d.id] = d.city;
            }))
        }

1 Ответ

0 голосов
/ 02 апреля 2020

Оба метода d3.json и d3.csv возвращают Обещание. Вы можете запустить его на Promise.all и дождаться результатов.


async function run(){
  const [usdata, county_data] = await Promise.all([d3.json("testdata/us.json"), d3.csv("testdata/county_dates.csv")])
  const county_data_processed = county_data.map(row => {
     // do something with row 
    return row
  }
}

run()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...