Node.js模块返回值判断问题:如何正确获取同步函数返回结果?
问题分析与解决
你贴出的myFunc是同步函数,调用后会立刻返回结果,理论上不可能出现判断逻辑先于函数返回的情况。如果实际运行中真的遇到这个问题,要么是你简化了代码(原函数包含异步操作没贴出来),要么是模块加载或变量赋值存在异常。
先排查同步代码的异常情况
直接运行你提供的代码,正常结果应该是:
- 当
string = "test!"时,控制台输出it is returned true。
如果实际结果不符,检查以下两点: - 模块路径是否正确:比如是不是应该用相对路径
./test-xxx-nodemodule,而非直接写包名? string变量是否被其他代码意外修改?
如果原函数包含异步操作(你简化了代码)
要是你的myFunc实际包含异步逻辑(比如文件读写、网络请求),需要改成异步写法,以下是两种常用解决方案:
方案1:使用回调函数
修改模块代码:
exports.myFunc = function(string, callback) { // 模拟异步操作,实际场景可以替换为fs.readFile、API请求等 setTimeout(() => { callback(null, string ? true : false); }, 1000); }
调用时将判断逻辑放入回调函数中:
var test_mod = require('test-xxx-nodemodule'); let string = "test!"; test_mod.myFunc(string, (err, results) => { if (results === true) { console.log("it is returned true"); } else { console.log("it is returned false"); } });
方案2:使用Promise + async/await
修改模块代码:
exports.myFunc = function(string) { return new Promise(resolve => { // 模拟异步操作 setTimeout(() => { resolve(!!string); }, 1000); }); }
调用时用async/await等待异步结果:
var test_mod = require('test-xxx-nodemodule'); let string = "test!"; async function runTest() { const results = await test_mod.myFunc(string); console.log(results ? "it is returned true" : "it is returned false"); } runTest();
内容的提问来源于stack exchange,提问作者wonkydev
相关产品推荐
相关产品推荐

