2017-01-11 15 views
0

私は現在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ライブラリを変更したくありません。

私の問題を解決するアイデアは大変ありがたいです!

答えて

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; 
    }) 
    } 
} 
+0

感謝を非同期ライブラリを使用することができます!私の最初のアクションを呼び出す関数が、滝が終わるのを待つのかどうかは不思議です。 – Wei

+0

私はあなたのコードがどのように動作しているのか全く分かりません。 'firstaction()'は関数呼び出しであり、コンテキストを返すのですか? 'firstaction()'関数定義と 'async_function()'定義も投稿してください。 –

+0

はい、firstaction()はコンテキストを返す関数呼び出しです。とにかく、あなたの道を使って解決しました。それは私のコードのビットの再構築が必要です。どうもありがとうございます!。 – Wei

関連する問題