2017-01-11 3 views
0

Ich entwickle gerade einen Bot mit wit.ai. Ich bin ziemlich neu zu node.js. Grundsätzlich befolge ich die Anleitung von node-wit lib. Ich durch mein wit Objekt konstruieren:Async-Funktion in WIT-Aktionen

const wit = new Wit({ 
    accessToken: WIT_TOKEN, 
    actions, 
    logger: new log.Logger(log.INFO) 
}); 

In meinen Handlungen, ich habe so etwas wie:

const actions = { 
    send({sessionId}, {text}) { 
    //my sending action goes here. 
    }, 
    firstaction({context, entities,sessionId}) { 
    var data = async_function(); 
    context.receiver = data; 
    return context; 
} 
} 

Das Problem ist, dass alles, was nach async_function kommt zuerst ausgeführt wird. Ich habe versucht, async_function ein Versprechen zurückzugeben. Dies würde jedoch nicht funktionieren, da alles, was nach meiner ersten Aktion in der Bibliothek kommt, zuerst ausgeführt wird, ohne auf die Rückkehr des Kontexts zu warten. Ich möchte die node-wit Bibliothek nicht ändern.

Jede Idee, die mein Problem lösen würde, wird geschätzt!

Antwort

2

können Sie Asynchron-Bibliothek für asynchronen Aufruf verwenden

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

Vielen Dank für Ihre Referenz! Ich frage mich nur, ob die Funktion, die meine erste Station ruft, auf den Wasserfall warten wird? – Wei

+0

Ich bin mir nicht ganz sicher, wie Ihr Code läuft, 'firstaction()' ist ein Funktionsaufruf und Sie geben den Kontext zurück? könnten Sie bitte 'firstaction()' Funktionsdefinition und 'async_function()' Definition auch posten. –

+0

Ja, der Firstaction() ist ein Funktionsaufruf, der Kontext zurückgibt. Wie auch immer, ich habe es gelöst, indem ich deinen Weg benutzt habe. Es erfordert ein wenig Umstrukturierung meines Codes tho. Ich danke dir sehr!. – Wei