我正在尝试使用slack web api向用户发送直接消息,但是我认为获取所有可用用户的getSlackUser方法在我调用slackId时无法及时完成。
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);
}
问题是此行的优先级:
const slackId = await getSlackUser('example_real_name').id;
由于成员访问的优先级(评估前)比等待优先级高,因此它实际上与以下各项相同:
const slackId = await (getSlackUser('example_real_name').id);
getSlackUser
返回Promise对象,则其id
成员未定义。Await等待未定义的undefined
。
要解决此问题,请确保在之前评估await .id
:
const slackId = (await getSlackUser('example_real_name')).id;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句