我正在使用IBM沃森音调分析器API与React. js和React.我有这个代码发送一些测试到沃森API:
// tone-analyser.js
class ToneAnalysis {
constructor() {
const params = {
username: process.env.USERNAME,
password: process.env.PASSWORD,
version_date: '2018-01-31'
}
this.Analyzer = new ToneAnalyzerV3(params);
}
ToneAnalyser(input) {
let tones = this.Analyzer.tone(input, (err, tone) => {
if (err) console.log(err.message)
let voiceTone = tone.document_tone.tones[0].tone_id;
console.log(voiceTone) // Logs the right value on Node.js console
return voiceTone;
});
return tones;
}
}
module.exports = ToneAnalysis;
字符串
然后我在我的Express后端上使用它,如下所示:
// server.js
const ToneAnalysis = require('./api/tone-analyser');
const app = express();
const input = {
tone_input: 'I am happy',
content_type: 'text/plain'
}
app.get('/api/tone', (req, res) => {
let tone = new ToneAnalysis().ToneAnalyser(input);
return res.send({
tone: tone
});
});
型
我在这里从React调用了一个API:
// App.js
componentDidMount() {
this.callApi()
.then(res => {
console.log(res.tone); // Logs the wrong value on Chrome console
})
.catch(err => console.log(err));
}
callApi = async () => {
const response = await fetch('/api/tone');
const body = await response.json();
if (response.status !== 200) throw new Error(body.message);
console.log(body);
return body;
};
型
我期望res.tone
的值是string
,显示从音调分析函数(new ToneAnalysis().ToneAnalyser(input);
)获得的音调。
{
uri: {...},method: "POST", headers: {...}}
headers: {...},
uri: {...},
__proto__: Object
}
型
我认为这是因为res.send(...)
在tone
从API获得值之前运行。我的问题是,如何使res.send(...)
仅在tone
获得值之后运行?
我尝试将this.Analyzer.tone(input, [callback])
中的回调函数 Package 在async/await
块中,但这并没有解决这个问题。任何关于如何解决这个问题的想法都将受到高度赞赏。谢谢!
3条答案
按热度按时间628mspwn1#
如果调用
字符串
返回一个promise,然后你可以做一些类似于
型
pbpqsu0x2#
如果调用
字符串
返回一个promise,然后你可以做一些类似于
型
wf82jlnq3#
我会编辑express路由,以获得一个callback:
字符串