gpt4 book ai didi

node.js - 如何仅在稍后将值导出到其他地方后才在 Node js 中导入值?

转载 作者:搜寻专家 更新时间:2023-10-31 23:39:37 25 4
gpt4 key购买 nike

我正在学习 SSO 并在没有传统的 User 类/对象的情况下进行尝试。我是异步编程的新手,在管理数据流方面有困难。我被困在成功导出 boolean 值的位置,但我的导入(在另一个模块中)得到 undefined。我怀疑是因为import没有等到对应的export语句先执行。我如何让它和所有后续代码等待?

我不知道在这种情况下该尝试什么。

正在导出 usrFlag

的模块
const request = require("request");
let usrFlag = false; // assuming user doesn't already exist.

function workDB(usr_id, usr_name, dateTimeStamp) {

//some code excluded - preparing selector query on cloudant db

request(options, function (error, response, body) {
if (error) throw new Error(error);

if (body.docs.length == 0) addUsr(usr_id, usr_name, dateTimeStamp);
else {
xyz(true); //This user already exists in cloudant
console.log('User already exists since', body.docs[0].storageTime);
}
});
}


async function setUsrFlag(val) { usrFlag = val; }

async function xyz(val) {
await setUsrFlag(val);

//module.exports below does not execute until usrFlag has the correct value.
//so value is not exported until usrFlag has been properly set.

console.log(usrFlag);
module.exports.usrFlag = usrFlag;
}

正在导入此值的模块

const usrP = require('../config/passport-setup');
const dbProcess = require('../dbOps/dbProcessLogic'); // <-- This is import

router.get('/google/redirect', passport.authenticate('google'), (req, res) => {
dbProcess.workDB(usrP.usrPrf.id, usrP.usrPrf.displayName, new Date());

// Instead of true/false, I see undefined here.
console.log(dbProcess.usrFlag);
});

我希望导入模块的 require 函数等待导出模块向它发送所有必需的值。但是,我知道如果我没有明确告诉它这样做,这可能不会发生。我的问题是,怎么做?

最佳答案

所以,我刚刚修改了一些代码,以便我可以轻松地处理它。

正在导出 usrFlag

的模块
// const request = require("request");
let usrFlag = false; // assuming user doesn't already exist.

function workDB(usr_id, usr_name, dateTimeStamp) {

return new Promise(function (resolve, reject) {
setTimeout(function () {
xyz(true).then(function () {
resolve('done');
})
}, 1000);
});
}


function setUsrFlag(val) { usrFlag = val; }

function xyz(val) {
return new Promise(function (resolve, reject) {
setUsrFlag(val);
module.exports.usrFlag = usrFlag;
resolve('done');
});

}

module.exports = {
usrFlag,
workDB
}

导入此的模块

const dbProcess = require('../dbOps/dbProcessLogic'); // <-- This is import

dbProcess.workDB().then(function () {
console.log(dbProcess.usrFlag);
})

现在,当您运行第二个文件时,您会得到 usrFlag 为 true。我使用 setTimeout 来模拟请求。

抱歉,如果我破坏了您的一些代码。

关于node.js - 如何仅在稍后将值导出到其他地方后才在 Node js 中导入值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57720646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com