2017-07-07 294 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,但這是我看到的錯誤 –