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

未在Promise[duplicate]的.then()部分中设置变量

阙俊友
2023-03-14

我对JavaScript和Node.js还是个新手,所以当我的机器人需要它才能正常工作时,被扔进Promissions是相当令人畏惧的。

var storedUserID;
ROBLOX.getIdFromUsername(accountArg).then(function(userID) {
  message.reply("your id is " + userID);
  storedUserID = userID;
});
message.reply(storedUserID);

这基本上是我写出来的,它创建了一个名为'stored userid'的变量,我想稍后更新该变量。我试图更新它的承诺,但它似乎没有工作。

代码中,有message.reply(“your id is”+userID);它可以按照预期工作。它将打印给一个用户'your id is[NUMBER]',这样我就知道userID不是空的。

但是,当我运行message.reply(storedUserID);在Promise之外,没有打印任何内容,因为变量没有保存。我不知道为什么。

任何帮助都将非常感谢,因为这是对我的工作在大学!谢谢!

共有2个答案

狄旭
2023-03-14

因为getIdFromUsername是异步的,所以在存储ID之前运行您向存储的ID发送消息的最后一行。

像getIdFromUsername这样的异步函数不会阻止以下代码行的运行。如果希望在返回ID之后发生,则需要进入then回调。

冯元魁
2023-03-14

返回传递给的函数中的值。然后()

var storedUserID = ROBLOX.getIdFromUsername(accountArg)
                   .then(function(userID) {
                     return userID;
                   });

然后,您可以在必要时使用或更改promise

storedUserID = storedUserID.then(id) {
  return /* change value of Promise `storedUserID` here */
});

访问中的消息并将该值传递给消息。reply()。then()

storedUserID.then(function(id) {
  message.reply(id);
});

var storedUserID = ROBLOX.getIdFromUsername(accountArg);
// later in code
storedUserID.then(function(id) {
  message.reply(id);
});

 类似资料:
  • 首先我想问一下这是不是可能的,设置值为全局变量在异步函数或承诺? 如果是,那么为什么每个可用的教程/网站都在教程中使用console.log(结果),但从来没有使用它将其赋值给variable。 例如:

  • 问题内容: 我正在开发Spotify应用。我可以登录并获取我的令牌。我的问题是我无法在方法外访问变量。在这种情况下 这是我的方法: 如您所见,我在console.log中记录了名称,并在控制台中获得了正确的值。但是仅在我调用即使返回names变量的情况下得到的函数的情况下,它也可以在这里使用。 我需要那个变量。 问题答案: 没有返回任何东西。你需要从返回的承诺,然后当你回到内 即 它是由外部函数返

  • 问题内容: 我尝试使用下面的代码将命令输出存储在数组中,但是在“ while循环”之后无法打印数组元素,这意味着在代码的最后一行中,我的代码是否存在任何问题? 问题答案: 问题是您在 子 外壳中添加了元素。详细说明: 导致在子shell中执行,这是一个单独的执行环境。这意味着设置的变量不适用于 当前 外壳,其执行环境不会受到影响。您可以改为使用流程替代来实现相同目的: 请注意,不建议解析。尝试使用

  • 我有一个Projects表,包含三列:Task_ID、Start_Date和end_date。当上一行的End_Date和当前行的Start_Date之间的差值不等于零时,我正在尝试两次递增一个名为count的变量,但它对每一行都是递增的。那么,如何基于大小写when-then语句在mysql中更改变量的值呢? SQL查询- 输出- 预期产出-

  • 我是新的macOS。我知道这个问题以前被问过很多,但是所有提到的方法都不适合我。我也试过https://www.youtube.com/watch?v=_gdpclEE-kA一个,但是它显示了一个错误,比如没有这样的文件或目录。