2017-07-07 281 views
-3

我正在开发一个询问一系列问题的机器人。在我的代码中,第一个问题在进入下一个问题之前打印5次(因为数组中有5个名称)。我想要做的是在数组中打印第一个问题的名字,然后转到下一个问题。我该怎么办?Node.js for循环

var members = list.members; 

    for (var i = 0; i < members.length; i++) { 
     console.log('actual person - ' + members[i].name); 
     yesterday = function(res, convo) { 
     convo.ask("You're up " + members[i].name + '. What did you do yesterday?', function(res, convo){ 
      today(res, convo); 
      convo.next(); 
     }); 
     } 
     today = function(res, convo){ 
     convo.ask('What do you plan on doing today?', function(res, convo){ 
      block(res, convo); 
      convo.next(); 
     }); 
     } 
     block = function(res, convo){ 
     convo.ask('Is there anything standing your way?', function(res, convo) { 
      convo.next(); 
     }); 
     } 
     bot.startConversation(message, yesterday); 
    } 

回答

-1

A for循环在这种情况下不起作用,因为您有异步回调。所以你实际上开始了5次会话,然后才调用回调函数。

也不需要多次定义你的函数。

我不知道该API,但我会建议添加另一个参数到您的函数(i,当前成员编号),并链接回下一个对话(当第三个函数执行时提供i+1。这样的:

var members = list.members; 

function yesterday(i, res, convo) { 
    if (i >= members.length) return; // end 
    console.log('actual person - ' + members[i].name); 
    convo.ask("You're up " + members[i].name + '. What did you do yesterday?', function(res, convo){ 
     today(i, res, convo); 
     convo.next(); 
    }); 
} 

function today(i, res, convo){ 
    convo.ask('What do you plan on doing today?', function(res, convo){ 
     block(i, res, convo); 
     convo.next(); 
    }); 
} 

function block(i, res, convo){ 
    convo.ask('Is there anything standing your way?', function(res, convo) { 
     // Start next conversation... 
     yesterday(i+1, res, convo); 
     convo.next(); 
     // Or, alternatively: 
     // bot.startConversation(message, yesterday.bind(null, i+1)); 
    }); 
} 

bot.startConversation(message, yesterday.bind(null, 0)); 
+0

我试图实现你的代码,但有一个错误类型错误:CB是不是一个功能 –

+0

有这个代码不cb'的'何况你可能没有正确地执行它 – trincot

+0

。?是的,我没有把cb,但这是我看到的错误 –