提问者:小点点

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


我对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个答案

匿名用户

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

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);
});

匿名用户

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

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