我目前正在使用wit.ai
开发机器人。我对node.js
很新。基本上,我遵循node-wit
lib提供的指南。我通过以下方式构造我的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
回复一个承诺。但是,这不会起作用,因为我在node-wit
库中的第一个操作之后的任何操作都会先执行而不等待上下文返回。我不想修改node-wit
库。
任何可以解决我的问题的想法都值得赞赏!
答案 0 :(得分:2)
您可以使用异步库进行异步调用
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;
})
}
}