将回调与 CosmosDb Node.js SDK 一起使用?
Using callback with CosmosDb Node.js SDK?
我正在将一个应用程序从 Azure Functions v1 迁移到 v2。旧应用程序使用回调,我更愿意坚持使用它,以免弄乱应用程序逻辑。我需要获取数组形式的数据,然后在回调中执行应用程序逻辑。但是,在 Cosmosdb sdk v2.1.1 中使用回调时出现错误 UnhandledPromiseRejectionWarning: Error: toArray takes no arguments
。 Cosmosdb 文档在 Node.js 中没有使用回调的示例。以下是我的代码,请问我的代码有什么问题吗?
const CosmosClient = require('@azure/cosmos').CosmosClient;;
let config = {}
const endpoint = process.env.HOST;
const masterKey = process.env.COSMOS_DB_PRIMARY_KEY;
config.db_account = process.env.COSMOS_DB_ACCOUNT;
config.containerId = "games";
config.gameCollectionPath = "dbs/" + config.db_account + "/colls/games";
const client = new CosmosClient({
endpoint: endpoint,
auth: {
masterKey: masterKey
}
});
module.exports = function (context, req, game) {
client.database(config.db_account).container(config.containerId).items.query(querySpec).toArray(function (err, results) {
if (err) {
context.res = {}
context.done();
return;
}
if (my_condition_is_met) {
context.res = {}
context.done();
}
}
}
v2 SDK不直接支持回调。你必须把它传递给承诺。您的错误案例和成功案例也与承诺分开。
client.database("foo").container("bar").items.query(spec).toArray()
.then((response) => {
console.log(response.result)
})
.catch((err) => {
console.error("something went wrong with query", err);
});
FWIW,我们绝对推荐 async/await 模式。它使代码更加紧凑和可读,但带有回调的 Promises 也完全没问题。
我正在将一个应用程序从 Azure Functions v1 迁移到 v2。旧应用程序使用回调,我更愿意坚持使用它,以免弄乱应用程序逻辑。我需要获取数组形式的数据,然后在回调中执行应用程序逻辑。但是,在 Cosmosdb sdk v2.1.1 中使用回调时出现错误 UnhandledPromiseRejectionWarning: Error: toArray takes no arguments
。 Cosmosdb 文档在 Node.js 中没有使用回调的示例。以下是我的代码,请问我的代码有什么问题吗?
const CosmosClient = require('@azure/cosmos').CosmosClient;;
let config = {}
const endpoint = process.env.HOST;
const masterKey = process.env.COSMOS_DB_PRIMARY_KEY;
config.db_account = process.env.COSMOS_DB_ACCOUNT;
config.containerId = "games";
config.gameCollectionPath = "dbs/" + config.db_account + "/colls/games";
const client = new CosmosClient({
endpoint: endpoint,
auth: {
masterKey: masterKey
}
});
module.exports = function (context, req, game) {
client.database(config.db_account).container(config.containerId).items.query(querySpec).toArray(function (err, results) {
if (err) {
context.res = {}
context.done();
return;
}
if (my_condition_is_met) {
context.res = {}
context.done();
}
}
}
v2 SDK不直接支持回调。你必须把它传递给承诺。您的错误案例和成功案例也与承诺分开。
client.database("foo").container("bar").items.query(spec).toArray()
.then((response) => {
console.log(response.result)
})
.catch((err) => {
console.error("something went wrong with query", err);
});
FWIW,我们绝对推荐 async/await 模式。它使代码更加紧凑和可读,但带有回调的 Promises 也完全没问题。