簡體   English   中英

node.js傳遞模塊變量獲取結果

[英]node.js pass module variable get back result

我有這個:

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)
   })
}

query.js

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!'來獲取字符串param + ' YO!' 所以我知道它正在工作,我在做什么錯?

我需要在test.js有一個回調嗎?

UPDATE 1我在其中添加了一個回調, query.js仍然返回傳遞的params值,並且不返回param + ' YO!'

UPDATE 2好的,所以我已經保證了這一點,但仍然似乎無法獲得結果,這里的更新代碼仍然無法正常工作

test.js

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

console.log(query.searchQuery())

query.js

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 查詢完成后,查詢結果將被丟棄。

一種實現方法是將回調函數傳遞給查詢幫助器。 較干凈的解決方案可能是使用諾言。 您可以在MDN上找到有關如何對此類情況使用promise的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM