что вернуть из лазурной функции асинхронной - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть функция лазури, которая выглядит примерно так:

module.exports = async (context: Context, req: any) => {
  const canProceed = await new Auth().verify(context, req);

  if (!canProceed) {
    context.res = {
      status: 401,
      body: 'Unauthorised'
    };

    return context.done(undefined, context);
  }

  context.res = doStuff();

  return context.done(undefined, context);
}

Когда я запускаю функцию локально, я получаю это предупреждение или ошибку:

Ошибка: выберите либовернуть обещание или позвонить «сделано».Не используйте оба в вашем скрипте.

Из документов не ясно, как это должно работать

1 Ответ

0 голосов
/ 11 февраля 2019

Посмотрите на doc .

При использовании объявления асинхронной функции или простых обещаний JavaScript в версии 2.x среды выполнения функций вам не нужноявно вызовите обратный вызов context.done, чтобы сообщить, что ваша функция выполнена.Ваша функция завершается, когда экспортированная асинхронная функция / Promise завершается.

При экспорте асинхронной функции вы также можете настроить привязку вывода для получения возвращаемого значения.Рекомендуется, если у вас есть только одна выходная привязка.

Измените свойство name на $return в function.json, если это не так.

Для триггера http,

{
  "type": "http",
  "direction": "out",
  "name": "$return"
}

И ваш код функции тоже нуждается в модификации.Обратите внимание, что doStuff() должен возвращать правильный ответ, как и ожидалось.

module.exports = async (context: Context, req: any) => {
  const canProceed = await new Auth().verify(context, req);

  if (!canProceed) {
    return {
      status: 401,
      body: 'Unauthorised'
    };
  }
  else return doStuff();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...