从异步的azure函数返回什么

时间:2019-02-11 11:53:00

标签: azure azure-functions

我有一个azure函数,看起来像这样:

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 :(得分:1)

看看doc

  

在Functions运行时的2.x版本中使用异步函数声明或普通JavaScript Promises时,无需显式调用context.done回调以表明函数已完成。当导出的异步功能/承诺完成时,您的功能就完成了。

     

导出异步函数时,还可以配置输出绑定以获取返回值。如果您只有一个输出绑定,则建议这样做。

如果没有,请将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();

}