Как выйти из выполнения кода nodejs со значением из db? - PullRequest
0 голосов
/ 12 ноября 2018

Я недавно программист php. Я поразился, используя nodejs для того, чтобы завершить проект, который, к сожалению, может, к счастью, использовать и Dynamo DB, поэтому здесь у меня возникает проблема, я знаю, что это может быть просто как глупо, как это

Код, который является исключением, находится здесь

  if (typeof(req.body.question) == 'object') {
          quest = req.body.question;
        }
        if (typeof(req.body.question) == 'string') {
          quest = req.body.question;
        }else{
          questionsq = {
            'ConsistentRead': true,
            TableName : 'testquestions',
            KeyConditionExpression: "testid = :testid",
            ExpressionAttributeValues: { ":testid":{'S':'f3b21bf0-d6b9-11e8-bdf1-f7fcc44e7f9c'} }
          };
          vulog.info('Question is not settled so querying',questionsq);
          dynamodb.query(questionsq, function(err,quest){
              vulog.info('The data:',JSON.stringify(quest));
              if(err || !quest ){
                  vulog.error('Query went wrong',err);
              }else{
                vulog.info('Query went fine',JSON.stringify(quest));
                //return quest;
              }
          });
        }

После этого я ожидаю, что этот код будет работать.

var originalQuestions = [];
vulog.debug('--------------------');
if (!quest || quest.length == 0) {
  vulog.warn('Questions not entered');
  errstr += '\nAt least one interview question must be entered';
} else {
 //Goes on

В настоящее время я получаю это в терминале, и оно застревает там, и дальнейшее выполнение не выполняется.

Query went fine {"Items":[{//Datas}],"Count":2,"ScannedCount":2}

Что я хочу, так это то, что я хочу, чтобы первая часть кода выполнялась и получала значение квеста, а затем продолжала выполнение кода. Как я могу сделать это Прямо сейчас это возбуждает и застрять там vulog.info («Запрос прошел нормально», JSON.stringify (quest)); Никаких дальнейших казней:)

1 Ответ

0 голосов
/ 12 ноября 2018

РЕДАКТИРОВАНИЕ:

Асинхронный / ожидающий подход:

async function() {
  ........
  var quest = await queryQuestion();
  var originalQuestions = [];
  vulog.debug('--------------------');
  if (!quest || quest.length == 0) {
    vulog.warn('Questions not entered');
    errstr += '\nAt least one interview question must be entered';
  } else {
    //Goes on
  }
}

Оригинальный ответ:

Вы можете заключить первую логику в функцию и вернуть Обещание, которое, в свою очередь, будет resolve до quest или reject с error

function queryQuestion() {
return new Promise(function(resolve, reject) {
    if (typeof(req.body.question) == 'object' || typeof(req.body.question) == 'string') {
        quest = req.body.question;
      	resolve(quest);
    } else {
        questionsq = {
            'ConsistentRead': true,
            TableName: 'testquestions',
            KeyConditionExpression: "testid = :testid",
            ExpressionAttributeValues: {
                ":testid": {
                    'S': 'f3b21bf0-d6b9-11e8-bdf1-f7fcc44e7f9c'
                }
            }
        };
        vulog.info('Question is not settled so querying', questionsq);
        dynamodb.query(questionsq, function(err, quest) {
            vulog.info('The data:', JSON.stringify(quest));
            if (err || !quest) {
                vulog.error('Query went wrong', err);
                reject(error);
            } else {
                vulog.info('Query went fine', JSON.stringify(quest));
                //return quest;
                resolve(quest);
            }
        });
    }
})
}

А затем вызвать эту функцию

queryQuestion().then(function(quest){
  var originalQuestions = [];
  vulog.debug('--------------------');
  if (!quest || quest.length == 0) {
    vulog.warn('Questions not entered');
    errstr += '\nAt least one interview question must be entered';
  } else {
    //Goes on
  }
}, function(error){
  // Handle errors
})

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...