机智操作中的异步功能
Async function in wit actions
我目前正在使用 wit.ai
开发一个机器人。我对 node.js
很陌生。基本上,我遵循 node-wit
库提供的指南。我通过以下方式构建 wit
对象:
const wit = new Wit({
accessToken: WIT_TOKEN,
actions,
logger: new log.Logger(log.INFO)
});
在我的行动中,我有这样的事情:
const actions = {
send({sessionId}, {text}) {
//my sending action goes here.
},
firstaction({context, entities,sessionId}) {
var data = async_function();
context.receiver = data;
return context;
}
}
问题是 async_function
之后的任何内容都将首先执行。我试着让async_function
return一个承诺。但是,这是行不通的,因为我在 node-wit
库中的第一个操作之后发生的任何事情都将首先执行,而无需等待上下文 return。我不想修改 node-wit
库。
任何能解决我的问题的想法都将受到赞赏!
可以使用异步库进行异步调用
https://caolan.github.io/async/docs.html
const async = require('async')
const actions = {
send({sessionId}, {text}) {
//my sending action goes here.
},
firstaction({context, entities,sessionId}) {
async.waterfall([function(callback) {
var d = async_function();
// if err pass it to callback first parameter
// return callback(err)
callback(null,d);
}], function(err, result) {
if(err) {
return err;
}
var data = result;
context.receiver = data;
return context;
})
}
}
我目前正在使用 wit.ai
开发一个机器人。我对 node.js
很陌生。基本上,我遵循 node-wit
库提供的指南。我通过以下方式构建 wit
对象:
const wit = new Wit({
accessToken: WIT_TOKEN,
actions,
logger: new log.Logger(log.INFO)
});
在我的行动中,我有这样的事情:
const actions = {
send({sessionId}, {text}) {
//my sending action goes here.
},
firstaction({context, entities,sessionId}) {
var data = async_function();
context.receiver = data;
return context;
}
}
问题是 async_function
之后的任何内容都将首先执行。我试着让async_function
return一个承诺。但是,这是行不通的,因为我在 node-wit
库中的第一个操作之后发生的任何事情都将首先执行,而无需等待上下文 return。我不想修改 node-wit
库。
任何能解决我的问题的想法都将受到赞赏!
可以使用异步库进行异步调用
https://caolan.github.io/async/docs.html
const async = require('async')
const actions = {
send({sessionId}, {text}) {
//my sending action goes here.
},
firstaction({context, entities,sessionId}) {
async.waterfall([function(callback) {
var d = async_function();
// if err pass it to callback first parameter
// return callback(err)
callback(null,d);
}], function(err, result) {
if(err) {
return err;
}
var data = result;
context.receiver = data;
return context;
})
}
}