为什么map函数在promise之后没有执行?

时间:2017-01-15 11:38:10

标签: javascript d3.js promise

这是我的代码:

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文件。解析完成后,我正在解析promise并尝试在返回的数组上执行一系列lodash操作。我尝试链接转换和映射的方法,并尝试使用_.chain(...)强制链。

控制台不会返回任何错误,我可以在then部分记录数据数组。

非常感谢任何建议。

2 个答案:

答案 0 :(得分:2)

map用于与数组一起使用。在这里,您的result数组不包含任何项目,但与现有区域一样多。

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

因此,您可以使用Object.keys(data).map()而不是map:

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

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

答案 1 :(得分:0)

如果您添加拒绝并捕获您的承诺,您可能会看到代码错误。这是关于你的“控制台不会返回任何错误” 您可以在MDN文档中找到所有这些内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then#Chaining
另外,我认为你应该在“return resolve(dataArray);”中删除return,因为Promise等待解析,你不需要返回它。