【问题标题】:Asynchronous Easy Table scripts in AzureAzure 中的异步 Easy Table 脚本
【发布时间】:2017-12-18 10:27:17
【问题描述】:

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

举个简单的例子,假设我有一个表,我正在修改“插入”函数,如下所示:

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 异步并返回一个承诺(也许我想在执行上下文之前验证一个令牌或检查相关表上的某些内容)。上面的代码可能看起来像异步:

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 添加到表中的项目(在插入的情况下),但不是在这里。

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

【问题讨论】:

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


    【解决方案1】:

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

    如果您将其更改为:

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

    【讨论】:

    • 我回家后会试试的。我确实想过尝试一下,我以为我已经尝试过了,但我会再试一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多