Node.js wit操作中的异步函数

Node.js wit操作中的异步函数,node.js,asynchronous,callback,wit.ai,Node.js,Asynchronous,Callback,Wit.ai,我目前正在使用wit.ai开发一个机器人。我对node.js非常陌生。基本上,我遵循的是node-witlib提供的指南。我通过以下方式构造我的wit对象: const wit = new Wit({ accessToken: WIT_TOKEN, actions, logger: new log.Logger(log.INFO) }); 在我的行动中,我有以下几点: const actions = { send({sessionId}, {text}) { //my

我目前正在使用
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_函数
之后出现的任何内容都将首先执行。我试着让
async\u函数
返回一个承诺。但是,这不起作用,因为在
节点wit
库中我的第一个操作之后出现的任何内容都将首先执行,而无需等待上下文返回。我不想用库修改
节点


任何能解决我的问题的想法都将不胜感激

您可以使用异步库进行异步调用


您可以使用异步库进行异步调用


谢谢你的推荐!我只是想知道调用我的firstaction的函数是否要等待瀑布结束?我不确定您的代码是如何运行的,
firstaction()
是一个函数调用,您要返回上下文吗?请发布
firstaction()
函数定义和
async\u函数()
定义。是的,firstaction()是一个返回上下文的函数调用。不管怎样,我用你的方法解决了。它需要对我的代码进行一些重构。非常感谢你!。太好了,兄弟#祝您快乐,为您的参考!我只是想知道调用我的firstaction的函数是否要等待瀑布结束?我不确定您的代码是如何运行的,
firstaction()
是一个函数调用,您要返回上下文吗?请发布
firstaction()
函数定义和
async\u函数()
定义。是的,firstaction()是一个返回上下文的函数调用。不管怎样,我用你的方法解决了。它需要对我的代码进行一些重构。非常感谢你!。太好了,兄弟#快乐编码
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;
   })
  }
}