javascript - Botkit - 异步拉取用户数据

标签 javascript node.js async-await botkit

我正在尝试提取用户数据,而不是在另一个函数中使用返回的结果。我正在尝试使用 async/await 来实现它,但没有成功。

  const userAllowedToDeploy = (user_id, project) => {
    controller.storage.users.get(user_id, async function(err, user) {
      result = await (some calculations related to returned user here);
      return result;
    });
   });

  controller.hears(['^deploy (\\w+)'], 'direct_mention, mention', function(bot, message) {
    let channel = message.channel;
    let project = message.match[1];

    result = userAllowedToDeploy(message.user, project)
    console.log('final result: ' + result);

但由于某种原因最终结果是未定义

最佳答案

我已经设法让它与 Promises 一起工作。但我仍然很想知道如何使用 async/promise 重写它。

  const userAllowedToDeployWithPromise = (user_id, project, env) => {
    return new Promise(function(resolve, reject) {
      controller.storage.users.get(user_id, function(err, stored_user) {
        let result = (some calculations from stored_user here);
        resolve(result);
      });
    });
  };

  controller.hears(['^deploy (\\w+) (\\w+)'], 'direct_mention, mention', function(bot, message) {
    let channel = message.channel;
    let project = message.match[1];

    let allowed_promise = userAllowedToDeployWithPromise(message.user, project);

    allowed_promise.then(function(allowed) {
      if(allowed) {
        deployProject(project);
      } else {
        // some message here
      }
    });

关于javascript - Botkit - 异步拉取用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53004040/

相关文章:

javascript - 无法将 Canvas 保存到图像

javascript - 如何指定行/列来应用R Shiny的回调函数?

node.js - 是否有任何对象可以用于 node.js 的 Mapper 对象?

typescript - async/await 和 Promise 在 TypeScript 中如何工作

javascript - 我的函数声明中哪一个更好?生成器还是异步/等待?

javascript - HTML5 Canvas 层到 HTML/CSS 代码

javascript - 无法使用工厂创建对象

javascript - 通过 Knex.js 执行 POSTGRES LIKE 时出现语法错误

node.js - Flutter WebSockets 连接到 Socket.io 服务器

c# - Asp.Net MVC 5 - 长时间运行的任务 - 如何确保 IIS 回收 AppPool 时工作线程不会被丢弃?