Botkit - асинхронно извлекает данные пользователей - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь получить данные пользователей, а затем использовать возвращенный результат в другой функции. Я пытаюсь реализовать это, используя 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);

Но по какой-то причине окончательный результат равен undefined

1 Ответ

0 голосов
/ 26 октября 2018

Мне удалось заставить его работать с Обещаниями. Но я все еще хочу знать, как переписать его, используя async / обещание.

  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
      }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...