2016-09-09 1 views
0

Ich versuche, die Funktionen in meinem Messenger/wit.ai Chat-Bot von Callbacks zu Versprechen zu aktualisieren.Promise-Funktion löst nicht auf (javascript/Wit.ai)

Dieses ursprüngliche Format führt fein:

['buildScenario'](sessionId, context, cb) { 

    var trendChoice = scenarioCombos['trends'] 
    var disruptionChoice = scenarioCombos['disruptions'] 
    context.trend = trendChoice[Math.floor(Math.random() * trendChoice.length)] 
    context.disruption = disruptionChoice[Math.floor(Math.random() * disruptionChoice.length)] 

    cb(context) 
}, 

Aber wenn ich, wie unten zu Promises aktualisieren, es nicht durch machen:

['buildScenario']({sessionId, context, entities}) { 
    return new Promise(function(resolve, reject) { 
     var trendChoice = scenarioCombos['trends'] 
     var disruptionChoice = scenarioCombos['disruptions'] 
     context.trend = trendChoice[Math.floor(Math.random() * trendChoice.length)] 
     context.disruption = disruptionChoice[Math.floor(Math.random() * disruptionChoice.length)] 
     return resolve(context) 
    }) 
}, 

Ich habe versucht, das Debuggen von Konsolenprotokollen Hinzufügen überall in der Funktion wie folgt aus:

enter image description here

W enn die Funktion ausgelöst wird, stoppt er auf halbem Weg durch und scheitert, das Versprechen zu lösen:

enter image description here

Wenn ich versuche, console.log (Kontext) innerhalb der Funktion I ‚undefined‘ erhalten.

Was fehlt mir?

EDIT: Wenn ich die geschweiften Klammern um meine Funktion Parameter wie so entfernen:

['buildScenario'](sessionId, context, entities) { 
    console.log('BS POINT 1') 
    return new Promise(function(resolve, reject) { 
     console.log('BS POINT 2') 
     var trendChoice = scenarioCombos['trends'] 
     console.log(trendChoice) 
     console.log('BS POINT 3') 
     var disruptionChoice = scenarioCombos['disruptions'] 
     console.log(disruptionChoice) 
     console.log('BS POINT 4') 
     console.log(context) 
     context.trend = trendChoice[Math.floor(Math.random() * trendChoice.length)] 
     console.log(context) 
     console.log('BS POINT 5') 
     context.disruption = disruptionChoice[Math.floor(Math.random() * disruptionChoice.length)] 
     console.log(context) 
     console.log('BS POINT 6') 
     return resolve(context) 
    }) 
}, 

Ich bin in der Lage meinen Kontext einzuloggen, aber immer noch das Versprechen nicht lösen kann:

enter image description here

+0

Können Sie versuchen, zu lösen (Kontext), ohne Return-Anweisung. – Neelesh

+0

Keine Änderung, steht immer noch auf Punkt 4 und sendet dann eine 'no callback' Warnung. – wanstan

+0

Haben Sie den Promise Polyfill hinzugefügt? Sie müssen, wenn Sie planen, auf Internet Exploder ausgeführt werden. –

Antwort

0

mein Paketabhängigkeiten mein Knoten-wit-API-Version 3.3.2 schränkten Es stellte sich heraus, damit er nicht alle später aktualisieren (die API wurde-Promise basiert anstatt Rückrufe in v4.0.0 verwendet wird) . Sobald ich meine Paket.json Datei bearbeitet habe, um die neueste Version von Node-Wit zu aktivieren, habe ich es funktioniert.

0

Ihr buildSenario sollte so aussehen, aber es ist in Ordnung, wenn Sie es auf Ihre aktuelle Weise verwenden. Sie können es ignorieren, da es eine Warnmeldung ist.

buildScenario({{sessionId, context, text, entities}}) {}); 

Es scheint, dass Ihr einige Rückruf oder geting innerhalb 10 Sekunden Promises nicht gelöst.

Ich habe nur mit wit.ai mit FB Bot Integration gearbeitet, in Messenger bot Knoten 200 Status beim Empfang von Textnachricht senden sollte. Schau dir diesen Code an.

wit.ai example for fb messenger integration

+0

Warum haben Sie zwei Sätze geschweifter Klammern {} um Ihre Parameter? – wanstan

+0

Oh! Entschuldigung, das ist ein Fehler ... ignoriere sie buildScenario ({sessionId, context, text, entities}) {}); –