2016-11-16 50 views
-2

我試圖按照異步問題/指導這一頁上,特別是如果你沒有在你的代碼使用jQuery是「答案,這個答案的函數這就是一個價值是你「這樣一個問題:How do I return the response from an asynchronous call?但我似乎無法得到的值返回var返回從傳入作爲參數

function maxYvalue2(whendone) { 
    Rpt_scn_cost_v.find({ 
    filter: { 
     where: { 
     scenario_id: $stateParams.id 
     } 
    } 
    }).$promise.then(function(response) { 
    var maxYvalue = 0 
    for (i = 0; i < response.length; i++) { 
     currMaxYvalue = parseFloat(response[i].cur_cost) + parseFloat(response[i].tgt_cost); 
     if (currMaxYvalue > maxYvalue) { 
     maxYvalue = currMaxYvalue 
     }; 
    } 
    console.log("y3: " + maxYvalue) 
    whendone(maxYvalue); 
    return maxYvalue; 
    }); 
    return maxYvalue; 
}; 

function onComplete(maxYvalue1) { 

    mxVal = maxYvalue; 

    console.log("mx: " + mxVal) 

    return mxVal; 

}; 

var yVal = maxYvalue2(onComplete); 
console.log("fnc: " + yVal); 

yVal仍顯示爲不確定......我跟着前面的問題/答案,但仍無法在指南中得到的輸出多數民衆贊成....

我想跟隨在代碼中提到此結構:

function onComplete(a){ // When the code completes, do this 
    alert(a); 
} 

function getFive(whenDone){ 
    var a; 
    setTimeout(function(){ 
     a=5; 
     whenDone(a); 
    },10); 
} 

,然後調用它像這樣:

getFive(onComplete); 

我是否在參考問題中回答了正確的部分?

+0

你確定你已經經歷了你提到的問題嗎?這是一個很長的答案,解釋了這裏的一切。 PS:作爲一個側面建議 - 學習如何縮進,目前幾乎不可能在代碼中看到層次結構。 – zerkms

+0

是的......我特別關注「如果你沒有在代碼中使用jQuery,這個答案是給你的」迴應......我似乎無法弄清楚什麼是錯的......請注意,我'在JavaScript的一個n00b,所以我試圖學習,因爲我去... – user2061886

+0

不知道你爲什麼提到jquery,請重新閱讀檢查的答案。完全。 – zerkms

回答

2

承諾不使代碼同步。你將永遠無法立即從maxYvalue2返回值。只需返回諾言:

function maxYvalue2() { 
    return Rpt_scn_cost_v.find({filter: { where: {scenario_id: $stateParams.id}}}).$promise.then(function(response){ 
     var maxYvalue = 0 
     for (var i=0;i<response.length;i++) { 
      var currMaxYvalue = parseFloat(response[i].cur_cost) + parseFloat(response[i].tgt_cost); 
      if (currMaxYvalue > maxYvalue) { 
       maxYvalue = currMaxYvalue 
      }; 
     } 
     console.log("y3: " + maxYvalue) 
     return maxYvalue; 
    }); 
} 

maxYvalue2().then(function onComplete(yVal) { 
    console.log("fnc: " + yVal); 
});