Azure 函数 - tableService.queryEntities 被跳过 - node.js

Azure Function - tableService.queryEntities get skipped - node.js

我有一个使用 table 存储服务的功能,我在 azure 存储中更新数据没问题 table 但我无法使用 queryEntities。

我的代码如下所示:

var azure = require('azure-storage');
var tableService = azure.createTableService(mystuff,mystuff);
var query = new azure.TableQuery().select(['RowKey']);//or .top(5)

tableService.queryEntities('mytable', query, null, function(error, result, response) {
  if (!error) {
    // result.entries contains entities matching the query
  }
});

table 有条目,我只需要将 RowKey 推入结果;

如果我放置一个 context.log 来检查它的执行位置,我有:

var azure = require('azure-storage');
var tableService = azure.createTableService(mystuff,mystuff);
var query = new azure.TableQuery().select(['RowKey']); //or .top(5)
context.log("control1")
tableService.queryEntities('mytable', query, null, function(error, result, response) {
context.log("control2")
  if (!error) {
    // result.entries contains entities matching the query
  }
});

control1 出现在控制台中,control2 被跳过所以我猜 tableService.queryEntities 完全被跳过了。

所有其他 table服务方法都可以正常工作,有什么帮助吗?

https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-how-to-use-nodejs#query-a-set-of-entities

我可以重现你的问题:

简单说明一下,这是一道异步题。查询需要时间,函数跳过,先做查询下面的逻辑。

解决方案:

等待查询逻辑完成。像这样:

var azure = require('azure-storage')
module.exports = async function (context, req) {
    responseMessage = await executeSprocInternal();
    context.res = {
        body: responseMessage
    };
}
async function executeSprocInternal() {
    try {
        var tableService = azure.createTableService('storagename','xxxxxx');
        
    
        return new Promise((resolve, reject) => {
            var query = new azure.TableQuery().select(['RowKey']); //or .top(5)
            console.log("control1")
            tableService.queryEntities('mytable', query, null, function(error, result, response) {
            console.log("control2")
              if (!error) {
                // result.entries contains entities matching the query
              }
            });
        });
    } catch (e) {
        console.log(2, e)
        return new Promise((resolve, reject) => {
            reject(e);
        });
    }
}

这次成功拿到console1和console2:

让我知道这是否可以解决您的问题。