2017-01-30 6 views
0

у меня есть это:node.js передать переменную модуля вернуть результат

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!', поэтому я знаю, что она работает, что я делаю неправильно?

Нужно ли иметь обратный вызов в test.js?

UPDATE 1 я добавил функцию обратного вызова в и query.js еще возвращает переданную params значение и не возвращает param + ' YO!'

UPDATE 2 Ok, так что я promiseified это и до сих пор не могу получить В результате, вот обновленный код до сих пор не работает

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

ответ

0

Запрос к базе данных, скорее всего, асинхронный, так что вам нужен способ, чтобы перезвонить после того, как запрос был завершен. В настоящее время вы просто вызываете запрос и возвращаете оригинал queryString. Результат запроса затем отбрасывается после выполнения запроса.

Один из способов достижения этой цели - передать функцию обратного вызова вспомогательному запросу. Чистым решением может быть использование обещаний. Вы можете найти дополнительную информацию о том, как использовать обещания для таких случаев, как этот on MDN.

+0

Я добавил обратный вызов, который возвратил переданный параметр, но не измененную строку – spences10

+0

Ну, тогда вы, вероятно, не использовали его правильно. Невозможно сказать, не видя кода. – Timo

+0

Код находится в этом вопросе? Что еще тебе нужно? – spences10

 Смежные вопросы

  • Нет связанных вопросов^_^