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();
})
});
在 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();
})
});