gpt4 book ai didi

javascript - 创建 Angular 色,然后将该 Angular 色分配给成员不起作用,是否有更好的方法来处理这个问题? Discord.js

转载 作者:行者123 更新时间:2023-12-01 00:51:52 27 4
gpt4 key购买 nike

我想根据消息创建一个 Angular 色,然后创建该 Angular 色后,我想将其分配给同一消息中提到的 Angular 色。 Angular 色创建得非常好,但没有向用户提供正确的 Angular 色。

我尝试过按名字,但这会导致找不到该 Angular 色,所以我试图根据该 Angular 色所处的位置来获取该 Angular 色,但当我需要给出该 Angular 色时,它似乎没有处于正确的位置

var nameOC = getClanName(message.content);
console.log(nameOC);
message.guild.createRole({
name: nameOC,
hoist: true,
mentionable: false,
position: 1,
});
var role = message.guild.roles.find(role => role.position === 1);
console.log(role);
list.members.forEach(member => {
if(message.content.includes(member)){
member.addRoles(role);
}
});
message.channel.send(nameOC);

该 Angular 色使用正确的名称制作得非常好,但是它给出的 Angular 色是以前的第一个 Angular 色,而不是刚刚制作的 Angular 色。

最佳答案

同步与异步

假设您打算接您的 friend 去观看体育赛事。您不确定他们希望您什么时候来,所以您调用他们询问。他们想了一会儿,然后告诉你一个时间。您收到了所需的信息,因此挂断了电话。用编程术语来说,这将是同步代码的示例(有时被认为是 Node.js 中的“正常”代码)。

让自己回到同样的情况。然而,当你这次给你的 friend 打电话时,他们很忙。您不想打扰他们,因此请他们稍后给您打电话。你挂断电话,但现在你等待。一个小时后,他们会给您回电话并告诉您时间。这就是异步代码的思考过程。

屏幕后面还有很多信息,但为了简单起见,我不会用所有这些信息轰炸您。

<小时/>

promise

The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Guild.createRole()方法返回一个 Promise。

A Promise is in one of these states:

  • pending: initial state, neither fulfilled nor rejected.
  • fulfilled: meaning that the operation completed successfully.
  • rejected: meaning that the operation failed.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

尽管您调用了创建 Angular 色的方法,但它并不是立即创建的。 Promise 处于待处理状态。

<小时/>

解决方案

那么,我们如何检索 Promise 的结果呢?我们必须等待。

  • 为了保持简单的流程,您可以使用 await关键词。它所做的就是等待 Promise 被履行或拒绝,然后再继续执行进一步的代码。考虑以下示例:

    // Asynchronous context (meaning within an async function) needed to use 'await.'

    var role = await message.guild.createRole(...);
    console.log(role);
    // Continue using the 'role' variable...
  • 或者,您可以使用 then()链。履行 Promise 后,将使用返回值调用回调。在某些情况下,这很简单。但是,回调可能很快就会变得困惑,并且返回值的范围将受到限制。考虑这个例子:

    message.guild.createRole(...)
    .then(role => {
    console.log(role);
    // Continue using the 'role' variable...
    });
<小时/>

错误处理

当 Promise 被拒绝时,就意味着出了问题。必须捕获源自被拒绝的 Promise 的错误。如果不是,您将在控制台中收到包含错误的警告。

  • 您可以附加catch()方法的工作方式与 then() 类似,只不过将错误作为回调参数返回并且仅在拒绝时调用。考虑这个简洁的例子:

    message.guild.createRole(...)
    .then(role => {...})
    .catch(console.error);
  • 您可以使用try...catch,而不是附加多个catch()方法。陈述。如果 try block 内的任何 Promise 被拒绝,则执行 catch block 内的代码。例如:

    try {
    var role = await message.guild.createRole(...);
    await role.delete(); // Maybe not a logical example...
    } catch(err) {
    console.error(err);
    }
<小时/>

资源

关于javascript - 创建 Angular 色,然后将该 Angular 色分配给成员不起作用,是否有更好的方法来处理这个问题? Discord.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56910885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com