首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chaining承诺执行两个操作

Chaining承诺执行两个操作
EN

Stack Overflow用户
提问于 2016-07-15 11:54:55
回答 1查看 214关注 0票数 0

我目前正在学习Node.js/JavaScript,以便使用Discordie库编写一个不一致的机器人。

我有两个独立的操作,一个创建到服务器的邀请,另一个踢用户并向他们发送一条消息,如果他们在其中一条消息中使用了诽谤。

代码语言:javascript
复制
e.message.author.openDM().then(dm => dm.sendMessage(`You have been kicked from the **${e.message.guild.name}** server for using a slur. Please consider this a probation. When you feel that you are ready to not use that sort of language, feel free to rejoin us.`));
e.message.author.memberOf(e.message.guild).kick();

是我用来直接向用户发送消息,然后踢他们的方法。我有一个单独的命令(!invite),它生成一个invite并从接收到的json中提取邀请代码:

代码语言:javascript
复制
var generateInvite = e.message.channel.createInvite({"temporary": false, "xkcdpass": false});
generateInvite.then( function(res) { e.message.channel.sendMessage("https://discord.gg/" +res.code); });

我希望能够在直接消息代码中生成一个invite,以便向被踢的用户发送一个invite,如果他们可以避免再次使用这种语言,请回来,但是我不知道如何正确地链接我的承诺:

代码语言:javascript
复制
generateInvite.then( function(res) { return res.code } ).then(e.message.author.openDM().then(function(dm){ dm.sendMessage(`You have been kicked from the **${e.message.guild.name}** server for using a slur. Please consider this a probation. When you feel that you are ready to not use that sort of language, feel free to rejoin us by following this link: https://discord.gg/` + res.code)}));

这个promise链哪里出了问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-15 12:38:59

它应该是

代码语言:javascript
复制
const author = e.message.author;
generateInvite.then( function(res) {
    author.openDM().then(function(dm){
        dm.sendMessage(`… link: https://discord.gg/${res.code}.`);
        author.memberOf(e.message.guild).kick();
    })
});

不要return res.code到任何地方,也不要在回调的地方传递一个承诺(openDM().then(…))。

此外,您可能只想在向用户发送消息后才踢他,因此请确保这两个操作的顺序正确。

您还可以考虑并行创建邀请和打开dm通道,使用Promise.all等待两个promises,然后在单个回调中使用它们的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38387617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档