【发布时间】:2018-09-10 03:48:35
【问题描述】:
我正在使用 WATSON API 构建一个聊天机器人,在其中我使用 async/await 方法从 MongoDB 获取数据并获得结果,然后将其发送回用户。
函数 artpromise 是从 mongo DB 收集数据的 Promise。函数 randomartist 是一个从数据库中获取 3 个随机文档的函数。但是,WATSON BLUEMX Cloud 服务支持不支持异步方法的 6.1.3 的 Nodejs SDK。有什么方法可以更新 Blumix 上的 SDK 版本,还是我应该使用不同的方法从服务器获取数据?
let getConversationResponse = (message, context) => {
let payload = {
workspace_id: process.env.WORKSPACE_ID,
context: context || {},
input: message || {}
};
payload = preProcess(payload);
return new Promise((resolved, rejected) => {
// Send the input to the conversation service
conversation.message(payload, async function(err, data) {
if (err) {
rejected(err);
}
else{
if(data.context.type == 'ask'){
let artist = data.context.name;
let result = await artpromise(artist);
console.log(result);
data.context.name = result[0].name;
data.context.nationality = result[0].nationality;
data.context.birth = result[0].years;
data.context.url = result[0].art_link;
data.output.text = data.context.name+' is a '+data.context.nationality+' artist from '+data.context.birth+'. Check out a painting at '+data.context.url;
}
else if(data.context.type == 'random_artist'){
let result = await randomArtist();
console.log(result);
data.output.text = 'Let\'s find some random artists for you! \n'+result;
}
let processed = postProcess(data);
if(processed){
// return 값이 Promise 일 경우
if(typeof processed.then === 'function'){
processed.then(data => {
resolved(data);
}).catch(err => {
rejected(err);
})
}
// return 값이 변경된 data일 경우
else{
resolved(processed);
}
}
else{
// return 값이 없을 경우
resolved(data);
}
}
});
})
}
【问题讨论】:
标签: node.js ibm-cloud watson watson-conversation