javascript - 将此js移至函数中

标签 javascript

我怀疑这是非常微不足道的,但我有这个代码:

var latestMth;
d3.csv("data/blah.csv", function(rows) {
    x = rows.map(function(d) {
        return parseDate(d.dt)
    });
    latestMth = formatDateOutputMTH(d3.max(d3.values(x)));
});

...
...
.text("Month is " + latestMth);

它可以正常显示“月份是 3 月 17 日”。

我尝试将上述内容设为函数,但结果现在显示为“月份未定义”。为什么会发生这种情况:

var latestMth = function() {
    d3.csv("data/blah.csv", function(rows) {
        x = rows.map(function(d) {
            return parseDate(d.dt)
        });
        return formatDateOutputMTH(d3.max(d3.values(x)));
    });
}
...
...
.text("Month is " + latestMth());

最佳答案

假设 d3.csv() 不是异步的。

因为你没有从函数中返回:

var latestMth = function() {
    return d3.csv("data/blah.csv", function(rows) {  // added return 
        x = rows.map(function(d) {
            return parseDate(d.dt)
        });
        return formatDateOutputMTH(d3.max(d3.values(x)));
    });
}

注意,如果是异步的,你可以使用 Promise:

function setLatestMonth() {
    return new Promise((resolve, reject) => {
        d3.csv("data/blah.csv", function(rows) {
            x = rows.map(function(d) {
                return parseDate(d.dt)
            });
            resolve(formatDateOutputMTH(d3.max(d3.values(x))));
        });
    });
}

setLatestMonth().then(latestMonth => {
    // ...
    // ...
    // ...
    .text("Month is " + latestMonth);
});

我不知道 d3.csv() - 如果它已经返回一个 Promise,您可以简单地链接该 Promise,而不是自己创建一个新的 Promise。

关于javascript - 将此js移至函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42947341/

相关文章:

javascript - 图片在CSS中的位置

javascript - 如何从一个文本区域复制到另一个文本区域?

javascript - 将 jQuery 代码翻译为 Google 跟踪代码管理器的纯 JavaScript

用于在函数内部连接字符串 + 变量的 Javascript 语法

javascript - 使用具有未定义启动值的管道

javascript - jQuery 中的 PHP 问题为 ' "

javascript - 使用innerHTML和vanilla JS检索节点的内容

javascript - 图像作为 <input type ="button"/> 的值

javascript - 如何在我的 Django REST api 上调试启用 CORS

php - 表单提交取消了我的 URL 查询字符串中的参数