2016-08-01 22 views
0

我一旦用戶到達重命名我問他們在鍵入一個看起來類同這是我的node.js內的Skype博特博特必須重新啓動用戶輸入傳遞到請求功能

var SearchName = '', 
TaxBillNu = '' 
_rows = '10', 
SearchDetail; 

function getMobileData (Name, TaxBill, Rows) { 
url = "http://example.com/api/search/OwnerName="+Name+"&TaxBill="+TaxBill+"&Rows="+Rows; 
request({ 
    url: url, 
    json: true 
}, function (error, response, body) { 
     if (!error && response.statusCode === 200) { 
     SearchDetail = body; 
     }else{ 
      session.beginDialog('/'); 

      err = error; 
      } 
}) 
} 

的API搜索查詢,然後它去搜索結果列表使用API​​

bot.dialog('/REName', [ 
    function (session) { 
     builder.Prompts.text(session, "Type a search query.."); 
    }, 
    function (session, results) { 
     if (results.response) { 
      SearchName = results.response; 
      getMobileData(SearchName, TaxBillNu, _rows) 
      if(err){ 
      session.send(err); 
      } 
      session.beginDialog('/REList'); 
     } 
    } 
]); 

我的問題,到目前爲止,是,即使我得到我的搜索結果返回(在第二到處)我先得到一個錯誤發生問題時,搜索變量將被保存,但該函數不會更新json re的正文追求,直到它重新啓動。如何確保我可以在bot.dialog('/REName', [之後運行此功能,並且第一次獲得更新的SearchDetail = body

編輯:在這一點上,它需要3次重新啓動之前,URL與用戶輸入完成,並傳遞我所需要的。

回答

1

使用異步編程技術來組織您的程序控制流。由於您需要等待操作完成(REST API請求),然後將該數據傳遞給下一步,因此對於async.waterfall()控制流模式您有一個完美的用例。

例如,使用Node.js的模塊async,構建async.waterfall您的對話框處理程序中是這樣的:

var async = require('async'); 

bot.dialog('/REName', [ 
    function (session) { 
     builder.Prompts.text(session, "Type a search query.."); 
    }, 
    function (session, results) { 
     if (results.response) { 
      SearchName = results.response; 
      // do async stuff here 
      async.waterfall([ 
       function(callback) { 
        // modify your getMobileData() method so it returns desired result 
        var mobileData = getMobileData(SearchName, TaxBillNu, _rows); 
        callback(null, mobileData); 
       }, 
       function(mobileData, callback) { 
        // mobileData gets passed from the previous function 
        // then call session beginDialog 
        session.beginDialog('/REList'); 
        callback(null); 
       } 
      ], function (err, result) { 
       // handle errors here 
       session.send(err); 
      }); 

     } 
    } 
]); 
相關問題