gpt4 book ai didi

javascript - Azure 表存储返回查询结果

转载 作者:行者123 更新时间:2023-12-03 01:18:37 25 4
gpt4 key购买 nike

我正在尝试创建一个 Azure 函数,它将接受参数并返回存储在 Azure 表中的值。我相信我遇到的问题更多地与 javascript 有关,而不是与 Azure Table SDK 有关。

如何通过 http 响应从查询返回值?我附上了代码的副本,它应该解释我感到困惑的地方。我的主要困惑是由于我能够调用 context.log() 但无法从查询方法中的函数调用 context.res{}

我知道作用域与此有关,但我不是 javascript 和嵌套函数方面的专家。一些指导或示例将不胜感激

var azure = require('azure-storage');
module.exports = function (context, req) {
context.log('Some Function');
var hostUri = 'https://*******.table.core.windows.net'
var sasToken = 'abc123'

if (req.query.value) {
var tableService = azure.createTableServiceWithSas(hostUri, sasToken)
var nothing = tableService.retrieveEntity('Table', 'Partition', 'Row', function(error, result, response) {
if (!error) {
context.log('I am able to send data to the logs here')
context.res = {
status: 200,
body: "This is what I am tring to return -> " + JSON.stringify(result)
};
}
})
context.res = {
status: 200,
body: "I'm able to get a response here"
};
}
else {
context.res = {
status: 400,
body: "Somthing went wrong..."
};
}
context.done();
};

最佳答案

解决方案第一:

if (req.query.value) {
var tableService = azure.createTableServiceWithSas(hostUri, sasToken)
tableService.retrieveEntity('Table', 'Partition', 'Row', function(error, result, response) {
if (!error) {
context.log('I am able to send data to the logs here')
context.res = {
status: 200,
body: "This is what I am tring to return -> " + JSON.stringify(result)
};
}
else{
context.res = {
status: 400,
body: error
};
}
context.done();
})

}
else {
context.res = {
status: 400,
body: "Value is empty"
};
context.done();
}

说明:

让我们将context.res按顺序标记为c1和c2以避免冗余。

你被回调函数捕获了。在从远程服务器检索实体(或发生错误)之前,不会执行回调函数(错误、结果、响应){}。这个操作可能需要一些时间,程序在等待完成的同时继续执行,这种模式称为异步。

因此回调中的代码片段 c1 不会立即执行,而是 c2 会立即执行。然后 context.done(); 在检索实体之前运行(您会看到响应消息我能够在此处获取响应),因此永远不会调用回调。

依赖回调结果的代码应该包含在回调中,以便它可以在回调完成后立即执行。将 context.done(); 放入回调和 else 段中,以确保它不会提前运行。

还有一个blog about asynchronous-javascript供您引用。

关于javascript - Azure 表存储返回查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51868508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com