Alexa技能中的Firebase调用被复制

时间:2018-01-09 14:19:04

标签: node.js firebase alexa alexa-skills-kit

我有以下处理程序:

'addTask': function () {
    var filledSlots = delegateSlotCollection.call(this);

    var taskName = this.event.request.intent.slots.taskName.value;
    var starNum = this.event.request.intent.slots.starNum.value;
    var usr = this.event.session.user.userId.split(".")[3];
    if (taskName && starNum && taskName !== "?" && starNum !=="?"){
        db.addTask(usr, taskName, parseInt(starNum), res => {
            this.emit(":tell", res);
        });
    }
},

所有Firebase功能都通过输入/输出方法进行测试,并按预期工作。期望此功能将新任务推送到数据库,或者如果存在此任务则添加到数量。

以下是Firebase代码;

addTask: (user, taskName, stars, cb) => {
    var ref = db.ref("users/" + user + "/tasks");
    ref.once("value").then(snapshot => {
        const data = snapshot.val();
        for (var task in data){
            if (data[task].name === taskName){
                ref.child(task).update({
                    name: taskName,
                    stars: stars,
                    quantity: data[task].quantity + 1
                }).then(() => {
                    cb("This task already exists, and an instance of the task has been added.");
                })
            }
        }
        ref.push().set({
            name: taskName,
            stars: stars,
            quantity: 1
        }).then(() => {
            cb("The task " + taskName + " worth " + stars + " stars has been added!");
        })
    }, err => console.log(err.code));
},

但是,当通过Alexa使用它时,发现函数几乎在同一时间被调用了两次(有时是三次)。然而,Alexa模拟器只响应第二次调用的信息(可以说它添加到数量中)。

知道这是怎么回事,或者至少有一个hacky解决方案?

1 个答案:

答案 0 :(得分:0)

固定。

结果if (taskName && starNum)不足以确保它是最后一次调用意图。需要检查以确保request.dialogState"COMPLETED"而不是"IN_PROGRESS"