2017-01-15 2 views
0

Вот мой код:Почему функция карты не выполняется после обещания?

let promise = new Promise((resolve) => { 
     let dataArray = d3.csvParse(csvData); 
     return resolve(dataArray); 
    }); 

    promise.then((dataArray: Array<Object>) => { 
     return _(dataArray).transform((result, item, name) => { 
      result[ item.district ]   = result[ item.district ] || {}; 
      result[ item.district ][ name ] = item; 
      return result; 
     }).value(); 

    }).then(data => data.map(d => console.log(d))); // not loading 

Я использую d3 для разбора CSV-файла. После того, как синтаксический анализ сделан, я разрешаю обещание и пытаюсь выполнить цепочку операций lodash на возвращаемом массиве. Я попытался связать методы преобразования и карты, а также попытался форсировать цепочку, используя _.chain(...).

Консоль не возвращает никаких ошибок, и я могу зарегистрировать массив данных в части then.

Любые предложения приветствуются.

ответ

2

Карта предназначена для использования с массивами. Здесь ваш массив result не содержит элементов, кроме как столько, сколько существует в существующих районах.

result[ item.district ]   = result[ item.district ] || {}; 

Таким образом, вы можете использовать Object.keys (данные) .map() вместо карты:

.then(data => { 
    Object.keys(data).map(function(elem) { console.log(data[elem]); }); 
}) 

https://runkit.com/587b513664a8d4001433714a/587b63902c363d0014cc3964

+0

спасибо за ваш ответ. Я понимаю что ты имеешь ввиду. Есть ли способ сделать это в lodash? возможно, используя mapKeys/mapValues? – abedzantout

+0

Должен признаться, что я не использую lodash, и это зависит от того, чего вы хотите достичь, когда вы наберете. Из того, что я понимаю, mapKeys будет использоваться для изменения имен свойств объектов, поэтому я не думаю, что это то, что вы хотите. mapValues ​​может быть ... – Booster2ooo

+0

спасибо за ваш ответ :) это решило мою проблему – abedzantout

0

Если вы добавите отклонение и поймаете свое обещание, вы можете увидеть ошибки кода. Речь идет о вашем «Консоль не возвращает никаких ошибок».
Все эти материалы вы можете найти в MDN. Документация: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then#Chaining
Кроме того, я думаю, вы должны удалить return в «return resolve (dataArray);», потому что Promise ждет решения, вам не нужно его возвращать.

+0

Спасибо за ваш ответ, я добавить отвергаем и поймать позже и ошибок до сих пор нет. Я обязательно проверю вашу ссылку – abedzantout

Смежные вопросы