机智操作中的异步功能

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_functionreturn一个承诺。但是,这是行不通的,因为我在 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;
   })
  }
}