for循环中的代码无法在行编辑器的Node JS Dialogflow中执行

时间:2019-10-01 09:20:19

标签: node.js dialogflow-fulfillment

我是Node js和使用Dialogflow开发聊天机器人的新手。 为了从firebase获得特定的响应,我必须调用以下函数。

  admin.database().ref(institutes+'/'+ Programme).once("value").then((snapshot) => {
        reply= snapshot.val();}).then((reply) =>                                        {
        for (var key in reply)
        {
             console.log('1 executed');
             admin.database().ref(institutes+'/'+ Programme +'/' + key + '/' + 'Group').once("value").then((datagroup)=>
             {
                 if(datagroup.val() == Group)
                 {
                     console.log('2 executed');
                     result+=key;
                 }
             });
        }
  });
  agent.add(`Hello`);

代码成功运行并回复了hello消息,但未执行for循环内编写的函数。也就是说,在控制台中,没有类似1已执行或2已执行的消息。

1 个答案:

答案 0 :(得分:-1)

我建议您使用以下示例代码来构造代码:

function readFromDb (agent) {
    // Get the database collection 'dialogflow' and document 'agent'
    const dialogflowAgentDoc = db.collection('dialogflow').doc('agent');

    // Get the value of 'entry' in the document and send it to the user
    return dialogflowAgentDoc.get().then(doc => {
        if (!doc.exists) {
            agent.add('No data found in the database!');
        } else {
            agent.add(doc.data().entry);
        }

        return Promise.resolve('Read complete');
    }).catch(() => {
        agent.add('Error reading entry from the Firestore database.');
        agent.add('Please add a entry to the database first by saying, "Write <your phrase> to the database"');
    });
}

代码取自this github file in the dialogflow/fulfillment-firestore-nodejs repo

我用它制作了用于在firebase上部署的node.js代码。我不使用for,但在mi情况下,我需要使用if,这可以完美地工作。