Javascript node.js pass模块变量获取返回结果

Javascript node.js pass模块变量获取返回结果,javascript,node.js,callback,promise,Javascript,Node.js,Callback,Promise,我有这个: test.js: getData(fetchData) function fetchData (callback) { params = 'query' var s = require('./helpers/query')(params) callback(params) } function getData () { fetchData(function (params) { console.log(params) }) } module.ex

我有这个:

test.js

getData(fetchData)

function fetchData (callback) {
  params = 'query'
  var s = require('./helpers/query')(params)
  callback(params)
}

function getData () {
  fetchData(function (params) { 
    console.log(params)
   })
}
module.exports = function (param) {
  var queryString = {}

  var db = require('./queryDB')

  // Check key isn't in db already, key being the param
  db.get(param, function (err, value) {
    if (typeof (value) !== 'undefined') {
      console.log('ALREADY IN DB ', param)
    } else {
      // Put a search query  
      db.put(param, Date(), function (err) {
        if (err) return console.log('Ooops!', err) // some kind of I/O error
        console.log('LOGGED QUERY STRING ', param)
        return param + ' YO!'
      })
    }
  })

  return queryString
}
query.js

getData(fetchData)

function fetchData (callback) {
  params = 'query'
  var s = require('./helpers/query')(params)
  callback(params)
}

function getData () {
  fetchData(function (params) { 
    console.log(params)
   })
}
module.exports = function (param) {
  var queryString = {}

  var db = require('./queryDB')

  // Check key isn't in db already, key being the param
  db.get(param, function (err, value) {
    if (typeof (value) !== 'undefined') {
      console.log('ALREADY IN DB ', param)
    } else {
      // Put a search query  
      db.put(param, Date(), function (err) {
        if (err) return console.log('Ooops!', err) // some kind of I/O error
        console.log('LOGGED QUERY STRING ', param)
        return param + ' YO!'
      })
    }
  })

  return queryString
}
我希望能够传入一个要添加到数据库中的键字符串,并返回该字符串,在本例中为其
params='query'
,我只是尝试使用
param+'YO!'获取字符串所以我知道它在工作,我做错了什么

我需要在
test.js
中有一个回调吗

update1我在中添加了一个回调,并且
query.js
仍然返回传递的
params
值,并且不返回
param+'YO!'

更新2好的,所以我现在已经承诺了这一点,但似乎仍然无法得到结果,这是更新后的代码仍然不起作用

test.js

var query = require('./helpers/query')

console.log(query.searchQuery())
var ura = require('unique-random-array')
var strings = require('./strings')
var qs = ura(strings.queryString)
var qsSq = ura(strings.queryStringSubQuery)
var query = qs() + qsSq()

module.exports = {
  searchQuery: function() {
    var promise = new Promise(function(resolve, reject) {
      var db = require('./queryDB')
        // Check key isn't in db already, key being the query
      db.get(query, function(err, value) {
        if (typeof(value) !== 'undefined') {
          console.log('ALREADY IN DB', query)
          return
        }
        else {
          // Put a search query  
          db.put(query, Date(), function(err) {
            if (err) return console.log('Ooops!', err) // some kind of I/O error
            // console.log('LOGGED QUERY STRING', query)
              // return query + ' YO!'
          })
        }
      })
      resolve(query, 'all good')
    })

    promise.then(function(result) {
      // console.log(result)
      return result
    }).catch(function(err) {
      // console.error('ERR', err)
    })
  }
}
query.js

var query = require('./helpers/query')

console.log(query.searchQuery())
var ura = require('unique-random-array')
var strings = require('./strings')
var qs = ura(strings.queryString)
var qsSq = ura(strings.queryStringSubQuery)
var query = qs() + qsSq()

module.exports = {
  searchQuery: function() {
    var promise = new Promise(function(resolve, reject) {
      var db = require('./queryDB')
        // Check key isn't in db already, key being the query
      db.get(query, function(err, value) {
        if (typeof(value) !== 'undefined') {
          console.log('ALREADY IN DB', query)
          return
        }
        else {
          // Put a search query  
          db.put(query, Date(), function(err) {
            if (err) return console.log('Ooops!', err) // some kind of I/O error
            // console.log('LOGGED QUERY STRING', query)
              // return query + ' YO!'
          })
        }
      })
      resolve(query, 'all good')
    })

    promise.then(function(result) {
      // console.log(result)
      return result
    }).catch(function(err) {
      // console.error('ERR', err)
    })
  }
}

数据库查询可能是异步的,因此需要某种方法在查询完成后回调。 目前,您只需触发查询并返回原始的
queryString
。查询完成后,查询结果将被丢弃


实现这一点的一种方法是将回调函数传递给查询帮助器。更清洁的解决方案可能是使用承诺。您可以找到有关如何在此类情况下使用承诺的更多信息。

我添加了一个回调,返回的是传递的参数,而不是修改后的stringWell,那么您可能没有正确使用它。看不到密码就说不出来密码在问题中?你还需要什么?