在箭头函数节点中设置全局变量



我想在当前消息之前获取消息作为变量。 这是我的代码:

message.channel.messages.fetch({ limit: 2 }).then(messages => {
prevMsg = messages.last()
}).catch(err => {
console.error(err)
}) 
console.log("prevMsg is " + prevMsg)

但是我在console.log所在的线路上得到了ReferenceError: prevMsg is not defined。 我的问题是如何在该箭头函数中设置变量,以便可以在其他地方访问该变量,或者是否有更好的方法来执行此操作?

你在那里的函数调用是异步的,这就是为什么它是未定义的......

const prevMsg;
message.channel.messages.fetch({ limit: 2 })
.then(messages => {
prevMsg = messages.last()
}).catch(err => {
console.error(err)
});
// the call above runs asynchronously that is why loggin here comes out undefined
// it has not been assigned yet...
console.log(prevMsg);

您需要实现一种方法来等待调用完成,您不能使用全局等待,但您也可以将其包装在异步函数中......

async function myfunction() {
const prevMsg = await message.channel.messages.fetch({ limit: 2 })
.then(messages => messages.last())
.catch(err => {
console.error(err)
});
// this should work
console.log(prevMsg);
}

最新更新