机智动作中的异步功能

时间:2017-01-11 04:49:42

标签: node.js asynchronous callback wit.ai

我目前正在使用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库。

任何可以解决我的问题的想法都值得赞赏!

1 个答案:

答案 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;
   })
  }
}