在 DialogFlow WebHook 中使用异步函数
Use Async Functions in DialogFlow WebHook
参考此处发布的解决方案 ()
我想要实现的是网络挂钩应该等到我从 api 调用中得到响应。
P.S: API 正在运行,只是机器人没有等待响应的到来。
任何帮助将不胜感激。谢谢
const rp = require('request-promise');
function convert(params){
return rp('https://data.fixer.io/api/convert?access_key=[my key]&from='+
params['currency-from']+'&to='+params['currency-to']+'&amount='+params.amount)
.then((data) => {
let responseData = JSON.parse(data);
let message = responseData.result;
console.log('Success');
return Promise.resolve(message);
}).catch((err)=> {
return Promise.reject(err);
});
}
function currencyConversion(agent) {
let params = request.body.result.parameters;
return convert(params)
.then((message)=> {
agent.add(`${params.amount} ${params['currency-from']} is ${message} ${params['currency-to']}`);
return Promise.resolve()
})
.catch((err) => {
console.log(err);
agent.add("Uh oh, something happened.");
return Promise.resolve();
})
}
let intentMap = new Map();
intentMap.set('Default Welcome Intent', welcome);
intentMap.set('Default Fallback Intent', fallback);
intentMap.set('currency.convert', currencyConversion);
Promise 逻辑看起来不错,但这行没有意义:
let params = request.body.result.parameters;
范围内没有 request
对象。
您可以从agent.parameters
获取请求的参数。
您没有说明您 运行 所处的环境,但根据您的代码和我在上面概述的 agent.parameters
更改,我能够使用 Firebase Cloud Functions 重现您的问题node.js6.14.
我能够通过使用 request-promise-native
包而不是 request-promise
来让它工作。顾名思义,它使用本机 Promises 而不是 Bluebird Promise 包,但您进行的调用是相同的。
参考此处发布的解决方案 (
我想要实现的是网络挂钩应该等到我从 api 调用中得到响应。
P.S: API 正在运行,只是机器人没有等待响应的到来。
任何帮助将不胜感激。谢谢
const rp = require('request-promise');
function convert(params){
return rp('https://data.fixer.io/api/convert?access_key=[my key]&from='+
params['currency-from']+'&to='+params['currency-to']+'&amount='+params.amount)
.then((data) => {
let responseData = JSON.parse(data);
let message = responseData.result;
console.log('Success');
return Promise.resolve(message);
}).catch((err)=> {
return Promise.reject(err);
});
}
function currencyConversion(agent) {
let params = request.body.result.parameters;
return convert(params)
.then((message)=> {
agent.add(`${params.amount} ${params['currency-from']} is ${message} ${params['currency-to']}`);
return Promise.resolve()
})
.catch((err) => {
console.log(err);
agent.add("Uh oh, something happened.");
return Promise.resolve();
})
}
let intentMap = new Map();
intentMap.set('Default Welcome Intent', welcome);
intentMap.set('Default Fallback Intent', fallback);
intentMap.set('currency.convert', currencyConversion);
Promise 逻辑看起来不错,但这行没有意义:
let params = request.body.result.parameters;
范围内没有 request
对象。
您可以从agent.parameters
获取请求的参数。
您没有说明您 运行 所处的环境,但根据您的代码和我在上面概述的 agent.parameters
更改,我能够使用 Firebase Cloud Functions 重现您的问题node.js6.14.
我能够通过使用 request-promise-native
包而不是 request-promise
来让它工作。顾名思义,它使用本机 Promises 而不是 Bluebird Promise 包,但您进行的调用是相同的。