node.js передать значение модуля get back result

97
3

У меня есть это:

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 Хорошо, поэтому я обещал это сейчас и все еще не могу получить результат, здесь обновленный код все еще не работает

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

спросил(а) 2021-01-28T04:15:01+03:00 3 месяца, 1 неделя назад
1
Решение
97

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

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

ответил(а) 2021-01-28T04:15:01+03:00 3 месяца, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема