nodejs, таблица динамо получить обратный вызов операции или асинхронный

Ребята, я пишу API, который получает результаты из таблицы DynamoDB и возвращает JSON в браузер.

Приведенный ниже код работает и возвращает желаемые результаты... однако после прочтения об асинхронности и обратных вызовах мне становится важно знать, должен ли я писать это по-другому? Хорошо ли масштабируется следующий пример с сотнями одновременных вызовов API?

Этот код, похоже, не использует обратные вызовы. Это асинхронно?

var restify = require('restify');
var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});
var db = new AWS.DynamoDB();

function myFunction(req, res, next) {
  var params = {
    TableName : 'myTable',
    KeyConditions : 
      {
        "number" : 
          {
            "AttributeValueList" : [
              {
                "S" : req.params.simethingid
              }
            ],
            "ComparisonOperator" : "EQ"
          }
      }
  }

  db.query(params, function(err, data) {
    if (err) {
      console.log(err);
      } 
    else {
      res.statusCode = 200;
      res.setHeader('Content-Type', 'text/plain; charset=UTF-8');
      res.send(JSON.stringify(data, undefined, 2));
      console.log(JSON.stringify(data, undefined, 2))
      res.end();
      }
  });
  return next();
 }

server.get('/searchme/:somethingid', myFunction);

Спасибо!


person Cmag    schedule 17.11.2013    source источник
comment
Что вы имеете в виду, он не использует обратные вызовы? db.query принимает обратный вызов в качестве второго параметра. Есть много факторов, которые определят, будет ли он масштабироваться — просто взглянуть на этот крошечный кусок кода недостаточно, чтобы сделать это определение.   -  person WiredPrairie    schedule 18.11.2013


Ответы (1)


Этот код, который вы показываете, является асинхронным и использует обратный вызов. Функция (ошибка, данные) {...} в вызове db.query является функцией обратного вызова.

Обратите внимание, что в этом коде вы передаете определение функции в db.query() -- db.query вызовет эту функцию, отсюда и название обратного вызова.

На этом форуме нельзя ответить на вопрос, будет ли этот код «хорошо масштабироваться с сотнями одновременных вызовов API». Трудно / невозможно дать вам хороший ответ на этот вопрос, не зная мучительного количества деталей о вашей среде.

person Hector Correa    schedule 18.11.2013