Watson Discovery getEnvironment方法未被调用/返回结果技术求助
问题分析与解决方法
你的问题根源是代码里的语法错误,直接导致getEnvironment方法没有被正确执行。仔细看你在getEnvironments回调里的这段代码:
discovery.getEnvironment({ environment_id: process.env.ENVIRONMENT}), function(error, data) { if (error){ console.log('Env Details', JSON.stringify(error, null, 2)); } console.log('Env Details', JSON.stringify(data, null, 2)); };
你在getEnvironment的参数对象{...}后面多写了一个右括号),把回调函数留在了方法调用的外面——这不仅是语法错误,还导致getEnvironment实际上没有传入回调逻辑,自然不会执行后续的详情获取操作。
修正后的代码
把多余的右括号移除,让回调函数作为getEnvironment的第二个参数传入即可:
const dotenv = require('dotenv'); dotenv.config() const DiscoveryV1 = require('watson-developer-cloud/discovery/v1'); var discovery = new DiscoveryV1({ username: process.env.USERNAME, password: process.env.PASSWORD, version_date: '2017-11-07' }); discovery.getEnvironments({}, function(error, data) { console.log('Env:', JSON.stringify(data, null, 2));//返回数据 // 修正:移除多余的右括号,将回调绑定为getEnvironment的第二个参数 discovery.getEnvironment({ environment_id: process.env.ENVIRONMENT}, function(error, data) { if (error){ console.log('Env Details Error:', JSON.stringify(error, null, 2)); return; // 出错时提前返回,避免打印空数据 } console.log('Env Details:', JSON.stringify(data, null, 2)); }); });
额外优化建议
为了避免回调嵌套带来的这类低级错误,你可以使用Watson SDK支持的Promise语法,代码逻辑会更清晰易读:
const dotenv = require('dotenv'); dotenv.config() const DiscoveryV1 = require('watson-developer-cloud/discovery/v1'); var discovery = new DiscoveryV1({ username: process.env.USERNAME, password: process.env.PASSWORD, version_date: '2017-11-07' }); // 使用async/await简化异步逻辑 async function fetchEnvData() { try { const envs = await discovery.getEnvironments({}); console.log('Env:', JSON.stringify(envs, null, 2)); const envDetails = await discovery.getEnvironment({ environment_id: process.env.ENVIRONMENT }); console.log('Env Details:', JSON.stringify(envDetails, null, 2)); } catch (err) { console.error('Request Error:', JSON.stringify(err, null, 2)); } } fetchEnvData();
内容的提问来源于stack exchange,提问作者user269964
相关产品推荐
相关产品推荐

