Используя обратный вызов с CosmosDb Node.js SDK? - PullRequest
0 голосов
/ 12 декабря 2018

Я переносу приложение из функций Azure 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 Ответ

0 голосов
/ 14 декабря 2018

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 с обратными вызовами тоже вполне подойдет.

...