0

我在使用 MongoJS 处理来自 MongoDB 的数据时遇到了麻烦,我有一个拒绝解决的承诺。老实说,我很困惑为什么这不起作用。它在我的本地机器上工作得很好,但是一旦我把它移到我的服务器上它就坏了。除了它只作为一个模块中断。是因为我使用的是异步吗?如果是,我该如何解决?

这就是我正在做的压缩到对我不起作用的事情

索引中:

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)

数据库模块中:

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

我真的不知道为什么这不起作用。如果它独立工作,它没有理由不作为一个模块工作。它可以在另一台计算机上运行。我唯一可以假设的是它与 deasync 的工作方式有关,但即便如此,也没有理由会干扰 Promise,因为它与 Promise 本身是分开的。

这让我发疯。

4

0 回答 0