2011-09-28 66 views
0

在此代碼:如何讓單一的功能這裏使用兩個時間

if (!parms.script) { // no script... load filename 
      execscript(parms, function (data){ 
       var text={'result':'success', 'response':data }; 
       if(typeof(data)!='object') { 
        try { 
         text.response=JSON.parse(text.response); 
        } catch(e) { 
         text={'result':'success','response':data}; 
        } 
       } 
       responsehttp.end(JSON.stringify(text)); 

      }); 
    } else { 
     //parameterised input will replace in script 
     if(query.paraminput!=undefined) { 
      var paraminput=qs.parse(query.paraminput); 
      parms=merge_options(parms, paraminput); 
     } 
     execscript(parms, function (data){ 
      var text={'result':'success', 'response':data }; 
      if(typeof(data)!='object') { 
       try { 
        text.response=JSON.parse(text.response); 
       } catch(e) { 
        text={'result':'success','response':data}; 
       } 
      } 
      responsehttp.end(JSON.stringify(text)); 

     }); 
    } 

在EXECSCRIPT回調它被稱爲兩次,我想打一個單一的功能,用於執行再打if和else。

我該如何做到這一點。

我試着使獨立的功能,但responsehttp未發現的錯誤camed。

回答

1

問題是(我懷疑)是你的公共函數在你的http響應處理程序的上下文之外聲明,因此responsehttp沒有定義。相反,將其創建爲closure function你的外部函數的範圍內:

function someCallbackYouDontShowInYourQuestion(req, responsehttp) { 
    // Declare your callback as a closure inside this function, so it 
    // captures responsehttp state 
    function callback(data) { 
    var text={'result':'success', 'response':data }; 
    if(typeof(data)!='object') { 
     try { 
     text.response=JSON.parse(text.response); 
     } catch(e) { 
     text={'result':'success','response':data}; 
     } 
    } 
    responsehttp.end(JSON.stringify(text)); 

    } 

    if (!parms.script) { // no script... load filename 
    execscript(parms, callback); 
    } else { 
    //parameterised input will replace in script 
    if(query.paraminput!=undefined) { 
     var paraminput=qs.parse(query.paraminput); 
     parms=merge_options(parms, paraminput); 
    } 
    execscript(parms, callback); 
    } 
} 
0
callback = function (data){ 
      var text={'result':'success', 'response':data }; 
      if(typeof(data)!='object') { 
       try { 
        text.response=JSON.parse(text.response); 
       } catch(e) { 
        text={'result':'success','response':data}; 
       } 
      } 
      responsehttp.end(JSON.stringify(text)); 

     } 

execscript(parms, callback); 
+0

我試過,但給人的是responsehttp沒有定義的錯誤。爲什麼會出現這個錯誤。 – XMen