【发布时间】:2021-01-07 20:52:39
【问题描述】:
我正在尝试使用 slack web api 向用户发送直接消息,但我认为当我调用 slackId 时,gets all the available users 的 getSlackUser 方法没有及时完成;
console.log(slackId) 给出未定义的意思,它没有用bolt 完成我的 api 调用
如何确保 getSlackUser 方法在继续执行其他操作之前完成(使其阻塞)?
const { WebClient } = require('@slack/web-api');
const { App } = require('@slack/bolt')
const rtm = new RTMClient(process.env.SLACK_OAUTH_TOKEN);
const web = new WebClient(process.env.SLACK_OAUTH_TOKEN);
const app = new App({
token: process.env.SLACK_OAUTH_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET
});
exports.handler = async (event) => {
const slackId = await getSlackUser('example_real_name').id;
console.log(slackId);
await sendSlackMessage(slackId, 'Bot message');
}
sendSlackMessage = async (channel, message) => {
await web.chat.postMessage({
channel: channel,
text: message,
as_user: true
});
}
getSlackUser = async(real_name) => {
const result = await app.client.users.list({
token: process.env.SLACK_OAUTH_TOKEN
});
console.log(result);
return result.members.find((user) => user.real_name == real_name);
}
【问题讨论】:
-
console.log(result) 显示用户列表是否提供了什么?如果是的话,这个成员数组是否有一个真实的名字来计算输入 real_name ?
-
是的,它会产生如下所示的响应:api.slack.com/methods/users.list
标签: javascript asynchronous aws-lambda async-await slack-api