我已经看到很多关于这类问题的问题,我理解异步行为是如何运作的。
但我发现的所有答案都无法帮助我。 在这里,我使用谷歌的DialogFlow节点api库,我只想在匹配意图时返回TRUE或FALSE。更容易请求,但它让我发疯,抱歉打扰。
function myFun(request){
sessionClient
.detectIntent(request)
.then(responses => {
console.log('Detected intent');
const result = responses[0].queryResult;
if (result.intent) {
console.log(` Intent: ${result.intent.displayName}`);
return true; //even tried return new Promise
} else {
console.log(` No intent matched.`);
return false;
}
})
.catch(err => {
console.error('ERROR:', err);
});
}
if(myFun(exampleRequest)==false){
//do stuff
}
编辑:完整示例
当我调用此函数时,我总是显然未定义。但是真的无法理解如何在一个简单的示例中正确返回布尔值。
解决:感谢@TrevorD的回答。 这就是我弄清楚的方法:
function myFun(request){
return new Promise(function (resolve, reject) {
// Send request and log result
sessionClient
.detectIntent(request)
.then(responses => {
console.log('Detected intent');
const result = responses[0].queryResult;
if (result.intent ) {
console.log(` Intent: ${result.intent.displayName}`);
resolve(true)
} else {
console.log(` No intent matched.`);
resolve(false) //return false;
}
})
.catch(err => {
console.error('ERROR:', err);
});
});
}