【发布时间】:2018-07-14 19:17:59
【问题描述】:
我将 IBM Watson Tone Analyzer API 与 Express.js 和 React 结合使用。我有这段代码可以向 Watson API 发送一些测试:
// 音调分析器.js 类音调分析{ 构造函数(){ 常量参数 = { 用户名:process.env.USERNAME, 密码:process.env.PASSWORD, 版本日期:'2018-01-31' } this.Analyzer = new ToneAnalyzerV3(params); } 音调分析器(输入){ 让音调= this.Analyzer.tone(输入,(错误,音调)=> { if (err) console.log(err.message) 让voiceTone =tone.document_tone.tones[0].tone_id; console.log(voiceTone) // 在 Node.js 控制台上记录正确的值 返回语音; }); 回声; } } module.exports = 音调分析;然后我像这样在我的 Express 后端使用它:
// server.js const ToneAnalysis = require('./api/tone-analysisr'); 常量应用程序 = 快递(); 常量输入 = { tone_input: '我很高兴', content_type: '文本/纯文本' } app.get('/api/tone', (req, res) => { 让音调=新音调分析()。音调分析器(输入); 返回 res.send({ 音调:音调 }); });我在这里从 React 进行 API 调用:
// 应用程序.js 组件DidMount() { this.callApi() .then(res => { 控制台.log(res.tone); // 在 Chrome 控制台上记录错误的值 }) .catch(err => console.log(err)); } callApi = async () => { const response = await fetch('/api/tone'); const body = 等待 response.json(); if (response.status !== 200) throw new Error(body.message); 控制台日志(正文); 返回身体; };我希望res.tone 的值是string,显示从音调分析功能(new ToneAnalysis().ToneAnalyser(input);)获得的音调。相反,我得到了
我认为这是因为 res.send(...) 在 tone 之前运行,具有来自 API 的值。我的问题是,如何让 res.send(...) 仅在 tone 具有值之后运行?
我尝试将this.Analyzer.tone(input, [callback]) 中的回调函数包装在async/await 块中,但这并没有解决问题。任何有关如何解决此问题的想法都将受到高度赞赏。谢谢!
【问题讨论】:
-
对话有网络功能。因此,您可以在对话中调用音调分析器。
标签: node.js reactjs express asynchronous ibm-watson