Bot必须重新启动才能将用户输入传递给请求函数
Bot has to restart to pass user input to request function
我的node.js Skype Bot 中有一个看起来与此类似的api
var SearchName = '',
TaxBillNu = ''
_rows = '10',
SearchDetail;
function getMobileData (Name, TaxBill, Rows) {
url = "http://example.com/api/search/OwnerName="+Name+"&TaxBill="+TaxBill+"&Rows="+Rows;
request({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
SearchDetail = body;
}else{
session.beginDialog('/');
err = error;
}
})
}
一旦用户到达REName,我要求他们输入搜索查询,然后使用API 进入搜索结果列表
bot.dialog('/REName', [
function (session) {
builder.Prompts.text(session, "Type a search query..");
},
function (session, results) {
if (results.response) {
SearchName = results.response;
getMobileData(SearchName, TaxBillNu, _rows)
if(err){
session.send(err);
}
session.beginDialog('/REList');
}
}
]);
到目前为止,我的问题是,即使我得到了搜索结果(在第二次遍历时),我一开始也会得到一个错误,即出现了问题,搜索变量会被保存,但该函数直到重新启动后才会更新json请求的Body。如何确保我可以在bot.dialog('/REName', [
之后运行函数,并第一次获得更新的SearchDetail = body
?
编辑:在这一点上,需要重新启动3次,URL才能完成用户输入并传递给我所需要的内容。
使用异步编程技术来组织程序控制流。
由于您需要等待一个操作完成(REST API请求),然后将该数据传递到下一步,因此您为async.waterfall()控制流模式提供了一个完美的用例。
例如,使用Node.js模块async,在对话框处理程序中构造一个async.waterfall
,如下所示:
var async = require('async');
bot.dialog('/REName', [
function (session) {
builder.Prompts.text(session, "Type a search query..");
},
function (session, results) {
if (results.response) {
SearchName = results.response;
// do async stuff here
async.waterfall([
function(callback) {
// modify your getMobileData() method so it returns desired result
var mobileData = getMobileData(SearchName, TaxBillNu, _rows);
callback(null, mobileData);
},
function(mobileData, callback) {
// mobileData gets passed from the previous function
// then call session beginDialog
session.beginDialog('/REList');
callback(null);
}
], function (err, result) {
// handle errors here
session.send(err);
});
}
}
]);
相关文章:
- 如何将输入(type=text)从html表单传递到javascript函数
- 是否可以将一个函数输入连接到另一个函数调用的文本
- JavaScript按钮/输入/函数,字符串反转
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- I'我试图在文本区域中进行特定的输入,调用特定的javascript函数,但没有成功;不起作用
- jQuery选择器不识别任何动态创建的HTML输入函数
- 为什么jQuery只在某些链接中输入函数
- 如何从 javascript 中的输入函数访问数据
- 反应路由器无法获取/取决于输入函数
- 为什么 Jquery 输入函数不返回完整的 url
- 将Multiple Var输入函数,搜索JSON数组,并将Multiple Array Val作为输出接收
- Javascript:让一个对象调用输入函数
- Jquery函数-多输入/ 1函数
- jQuery输入函数
- 使用jQuery中的表单输入函数
- 为什么html dom输入函数不工作
- 创建Pass Fail输入函数
- 如何在函数中输入函数
- 将输入属性数据传递给其他输入函数参数 - 角度