Используя обратный вызов с 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();
}
}
}
1 ответ
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, мы определенно рекомендуем асинхронный / ожидающий шаблон. Это делает код намного более компактным и читаемым, но Promises с обратными вызовами тоже вполне подойдет.