Azure中的异步Easy Table脚本

时间:2017-12-17 22:26:56

标签: node.js azure azure-mobile-services

在Azure门户中,我正在修改Easy Table的脚本,而我无法确定如何在修改后的脚本中正确地将响应返回给客户端。这是使用节点包azure-mobile-apps

就像一个简单的例子,假设我有一个表正在修改'insert'函数,就像这样:

function getUserHeader(context) {
    return context.req.headers['user-id'];
}


table.insert(function (context) {
  context.item._user_id = getUserHeader(context);
  return context.execute();
});

现在这一切都很好,按预期完美运行,桌面上的项目最终都是正确的_user_id和一切。

但是,让我们说,无论出于何种原因,我必须使getUserHeader异步并返回一个promise(也许我想在执行上下文之前验证一个令牌或检查相关表上的某些内容)。以下代码可能看起来像async:

function getUserHeader(context) {
    return new Promise(function(resolve, reject){
        resolve(context.req.headers['user-id']);
    });
}


table.insert(function (context) {
  getUserHeader(context)
    .then(function(uid) {
        context.item._user_id = uid;
        return context.execute();
    })      
});

现在它在一个级别上运行:context.execute运行,并且使用正确的_user_id创建记录。然而,客户端发出的http调用永远不会得到响应。通常,http响应返回cot添加到表中的项(在插入的情况下),但不在此处。

在easy table脚本的工作流程中添加异步函数的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

调用Promise函数时,您错过了return个关键字。

如果您将其更改为:

,这将有效
table.insert(function (context) {
    return getUserHeader(context).then(function(uid) {
        context.item._user_id = uid;
        return context.execute();
    })      
});