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服务方法都可以正常工作,有什么帮助吗?
我可以重现你的问题:
简单说明一下,这是一道异步题。查询需要时间,函数跳过,先做查询下面的逻辑。
解决方案:
等待查询逻辑完成。像这样:
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:
让我知道这是否可以解决您的问题。
我有一个使用 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服务方法都可以正常工作,有什么帮助吗?
我可以重现你的问题:
简单说明一下,这是一道异步题。查询需要时间,函数跳过,先做查询下面的逻辑。
解决方案:
等待查询逻辑完成。像这样:
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:
让我知道这是否可以解决您的问题。