当前位置: 首页 > 知识库问答 >
问题:

使用then()[duplicate]后无法更改promise待定状态

厍和颂
2023-03-14
var DVizModule = (() => {

    let dataset = [];

    let _data = async () => {
        const data = await d3.csv("data/alphabet.csv");
        return data;
    }
    let data = _data().then(data => {
        dataset = data;
        return dataset;
    })

    return {
        data: data
    }
})();
console.log(DVizModule.data);

它返回

Promise pending proto: Promise

PromiseStatus: "resolved"

PromiseValue: Array(26)

当我写的时候

const t = async function() {
    const data = await d3.csv("data/alphabet.csv");
    return data;
}
t().then(result => console.log(result))

它完美地返回文件我正在尝试通过访问文件内容

DVizModule.data

共有1个答案

耿学义
2023-03-14

如果希望同步访问data,则应将其声明为普通值,而不是promise。像这样的东西应该能起到作用:

const DVizModule = {};
d3.csv("data/alphabet.csv").then(data => DVizModule.data = data);

当然,请注意,在请求实际完成之前,dvizmodule.data将是未定义的。如果您想要确保值确实存在,您必须将外部上下文包装到async函数中,并在一开始就等待数据。这样,您既可以确保在代码访问该值时该值是存在的,又可以以同步的方式使用该值。

希望我答对了你的问题,而不是试图解决错误的问题;)

 类似资料:
  • 我试图访问的结果(这里是'机构')的抓取,但继续得到这个: promise{ 它说已解决,但不只是给我我想要的数组。 这是我的密码 以上结果来自console.log(Categories)

  • 当我试图访问中的函数时,我出错了。我用猫鼬,快递。 TypeError:无法读取在/private/var/www/html/sms/server/routes/user.routes.js:70:9层未定义的属性“then”。处理[as handle_request](/private/var/www/html/html/sms/node_modules/express/lib/router/l

  • 我正在尝试使用注册功能组件中的useState更新组件的状态。当用户输入无效的电子邮件地址并单击“提交”按钮时,以下代码将返回错误消息 我想用这段代码将错误消息设置为formData。 如何将错误消息设置为formData? 这是我的密码:

  • 我在iOS应用程序中实现了一个导航栏,我将淡色设置为白色,但在运行应用程序时,状态栏不跟随淡色,只是透明的(见图)。我的目标是状态栏有半透明的风格。 怎么解决这个问题?

  • 我正在尝试使用axios接收的数据,使用useState更新组件的状态。问题是“setCursos”不更新“cursos”,它以空数组开始。我试过很多东西,但似乎都不管用。请帮忙。这是a公司迄今为止所做的: 这就是我在express中看到的: aa和我获取数据的json文件:

  • 我对JavaScript和Node.js还是个新手,所以当我的机器人需要它才能正常工作时,被扔进Promissions是相当令人畏惧的。 这基本上是我写出来的,它创建了一个名为'stored userid'的变量,我想稍后更新该变量。我试图更新它的承诺,但它似乎没有工作。 在代码中,有message.reply(“your id is”+userID);它可以按照预期工作。它将打印给一个用户'yo