Функция возвращает неопределенный объект - PullRequest
0 голосов
/ 06 июня 2018

У меня есть функция, которая продолжает возвращать неопределенный объект каждый раз, когда я вызываю функцию.Мне было интересно, есть ли конкретный способ решения этой проблемы.В index.js я вызываю метод sqlQuery.getItem и ожидаю, что он вернет строку из БД, однако каждый раз возвращает неопределенное значение.

index.js

'use strict';
const Alexa = require('alexa-sdk');
const mysql = require('promise-mysql');
const querydb = require('./sqlQuery.js');


var testSQL = 'SELECT uWeight, uHeight from users where pin=1100';
//querydb.getItem(testSQL);

var values = querydb.getItem(testSQL);

if(values == undefined){
    console.log('Error');
}
else{
    console.log(values);
}

databaseConnection.js

var mysql = require('promise-mysql');

pool = mysql.createPool({
    host: "mytrainerdb.cbh07n2xwds2.us-east-1.rds.amazonaws.com",
    database: "trainerdb",
    user: "user",
    password: "password"
});

function getSqlConnection() {
  return pool.getConnection().disposer(function(connection) {
    pool.end(connection);
  });
}

module.exports = getSqlConnection;

sqlQuery.js

var Promise = require("bluebird");
var getSqlConnection = require('./databaseConnection');
var hello = "hello";

function getItem(sql){
    Promise.using(getSqlConnection(), function(connection) {
        return connection.query(sql).then(function(rows) {
            console.log(rows[0]);
            return (rows[0]);         
        }).catch(function(error) {
          return (error);
        });
    })
}
module.exports.getItem = getItem;

1 Ответ

0 голосов
/ 06 июня 2018
function getItem(sql){
    return Promise.using(getSqlConnection(), function(connection) {
        return connection.query(sql).then(function(rows) {
            console.log(rows[0]);
            return (rows[0]);         
        }).catch(function(error) {
          return (error);
        });
    })
}

Заметили возврат во второй строке?это будет иметь значение, но вы все равно не получите действительное значение var values = querydb.getItem(testSQL); в значениях, а скорее обещание, которое вы возвращаете.Вы получите это значение в случае, если обещания завершатся успешно в then обратном вызове объекта обещания, например

var valuesPromise = querydb.getItem(testSQL);
valuesPromise.then(function(result) {
  //use result here 
})

или просто

querydb.getItem(testSQL).then(function(result) {
  //use result here 
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...