首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >函数返回未定义的对象

函数返回未定义的对象
EN

Stack Overflow用户
提问于 2018-06-06 05:51:52
回答 1查看 78关注 0票数 0

我有一个函数,每次我调用这个函数时,它都会返回一个未定义的对象。我想知道是否有解决这个问题的具体方法。在index.js中,我调用了sqlQuery.getItem方法,并期望它从数据库返回一行,但每次都返回未定义的行。

index.js

代码语言:javascript
复制
'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

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2018-06-06 06:27:19

代码语言:javascript
复制
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);,而是您要返回的promise。如果promise在promise对象的then回调中成功,您将获得该值,如下所示

代码语言:javascript
复制
var valuesPromise = querydb.getItem(testSQL);
valuesPromise.then(function(result) {
  //use result here 
})

或者简单地说

代码语言:javascript
复制
querydb.getItem(testSQL).then(function(result) {
  //use result here 
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50709461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档