Azure 中的异步简单 Table 脚本

Asynchronous Easy Table scripts in Azure

在 Azure 门户中,我正在修改 Easy Table 的脚本,但我无法弄清楚如何在修改后的脚本中正确地 return 响应客户端。这是使用节点包 azure-mobile-apps

举个简单的例子,假设我有一个 table,我正在修改 'insert' 函数,如下所示:

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


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

现在一切正常,按预期完美运行,table 上的项目以正确的 _user_id 和所有内容结束。

但是让我们说,无论出于何种原因,我不得不使 getUserHeader 异步和 return 承诺(也许我想验证令牌或检查相关 table 上的某些内容在执行上下文之前)。上面的代码可能看起来像异步的:

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 响应 returns 带有添加到 table 的项目(在插入的情况下),但不是在这里。

将异步函数添加到简单 table 脚本的工作流中的正确方法是什么?

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

如果您将其更改为:

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