承诺函数无法解析(javascript / Wit.ai)

时间:2016-09-09 06:21:46

标签: javascript wit.ai

我正在尝试使用回调函数更新我的messenger / wit.ai聊天机器人中的函数。

此原始格式执行正常:

['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)
},

但是当我按照以下方式更新Promise时,它无法通过:

['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)
    })
},

我通过在整个函数中添加控制台日志来尝试调试,如下所示:

enter image description here

当触发该功能时,它会中途停止并且无法解决承诺:

enter image description here

当我在函数中尝试console.log(context)时,我得到'undefined'。

我错过了什么?

编辑:当我删除我的函数参数周围的花括号时:

['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)
    })
},

我能够记录我的上下文,但仍无法解析Promise:

enter image description here

2 个答案:

答案 0 :(得分:0)

您的buildSenario应该如下所示,但如果您以当前的方式使用它,那就很好了。您可以忽略它,因为它是一条警告信息。

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

似乎你的一些回调或承诺没有在10秒内解决。

我只使用fb bot integartion在wit.ai上工作,在messenger bot节点上应该发送200状态接收短信。看看这段代码。

wit.ai example for fb messenger integration

答案 1 :(得分:0)

原来我的包依赖关系将我的node-wit API版本限制为3.3.2并且不允许它稍后更新(API变为基于Promise而不是在v4.0.0中使用回调)。一旦我编辑了我的package.json文件以启用最新版本的node-wit,我就可以了。