Обещание выполнено, но не запускает .then (), но только на сервере Debian в качестве модуля - PullRequest
0 голосов
/ 01 августа 2020

У меня возникли проблемы с обработкой данных из MongoDB с использованием Mon goJS, где у меня есть обещание, которое не выполняется. Я честно не понимаю, почему это не работает . Он работает полностью на моем локальном компьютере, но как только я перемещаю его на свой сервер, он ломается. За исключением того, что он ломается только как модуль. Это потому, что я использую deasyn c? Если это так, как мне это исправить?

Вот что я делаю в сжатом виде у меня не работает

В индексе :

const db = require('./db')
//Obviously this works I'm just showing what I mean by "module"

data = db.get('somedata') //Passthrough for getData
console.log(data)
//On local machine, console says: thedata
//On deb server, console says: Promise { 'thedata' }
//On deb server, console ALSO says: MongoDB request timed out: Promise { 'thedata' }
// ^ (this is from the timeout part I added because it froze)

В модуле DB :

const db = mongojs(`connectionURIstring`, ['bot'])
const bdata = db.bot

function syncP(promise) {
    var answer;
    promise.then(value => {
        //Runs every time on local machine but not on server as module
        answer = value
    })
    //I also have .catch but it's not relevant
    setTimeout(function () {
        //Never runs on local machine but runs every time on server as module
        if (answer) return;
        answer = promise
        console.error('MongoDB request timed out:', promise)
    }, 2000)
    require('deasync').loopWhile(function () { return !answer })
    return answer
}

function getData(datapath) {
    //Datapath processing here
    var GDP = new Promise((resolve, reject) => {
        bdata.findOne({
            _id: primary
        }, function (err, dataJ) {
            //Stuff where I format data, comes out as variable data
            resolve(data)
        })
    })
    return syncP(GDP)
}

Я правда не знаю, почему это не работает. Нет нет причин, по которым он не должен работать как модуль, если он работает независимо. Работает на другом компьютере. Единственное, что я могу предположить, это то, что это как-то связано с тем, как работает deasyn c, но даже в этом случае нет причин, по которым это могло бы помешать обещанию, поскольку оно отделено от самого обещания.

Это сводит меня с ума.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...