2015-10-19 65 views
2

我在chartDirective的功能,這使得對函數的調用的服務來獲得數據,格式數據,然後從我的chartDirective調用另一個函數:Angular Promise,爲什麼我在這個例子中未定義'then'?

function chartTicker(ticker, disabled) { 
    disabled = disabled || false; 
    var defer = $q.defer(); 

    // Clear out previous chart: 
    d3.selectAll("svg > *").remove(); 
    document.getElementById('chart').innerHTML = ""; 
    chart  = {}, 
    chartData = []; 

    // Get and format data for chart: 
    document.getElementById('chart').innerHTML = "<svg></svg>"; 
    var timeInHours = TimeSpanFactory.getTimeHours(); 

    var promise = FormatChartDataFactory.getData(ticker, timeInHours).then(function() { 
     defer.resolve(); 
     return defer.promise; 
    }); 
} 

但是我得到的下面的錯誤下面一行: enter image description here

var promise = FormatChartDataFactory.getData(ticker, timeInHours).then(function() { 

這裏是我的FormatChartDataFactory.getData功能:

function getData(ticker, limit) { 
    var defer = $q.defer(); 
    chartObj.chartData = [{}]; 
    var limit_range = ''; 

    if (limit > 0) { 
     limit_range = '?limit=' + limit; 
    } 

    getTickerPrice(ticker, limit_range).then(function() { 
     defer.resolve(); 
     return defer.promise; 
    }); 

    // GET Ticker data and return chartObj into drawChart: 
    //////////////////////////////////////////////////////////////////// 
    function getTickerPrice(ticker, limit_range) { 
     return ApiFactory.getTickerQuotes(ticker.ticker, limit_range) 
      .success(function(data, status, headers, config) { 
       if (data.status === 'Success') { 
       // .... 

這裏是link to my full FormatChartDataFactory gist file

回答

2

承諾應該直接從代碼返回,它不應該從.then返回它的回調。總之你還沒有從函數返回承諾,你正在尋找.then方法,這會導致錯誤。

代碼

//1st place 
var promise = FormatChartDataFactory.getData(ticker, timeInHours).then(function() { 
    defer.resolve(); 
}); 
return defer.promise; 

//2nd place 
getTickerPrice(ticker, limit_range).then(function() { 
    defer.resolve(); 
}); 
return defer.promise; 
+1

大聲笑,這是它!這是歷史上最快的答案:) –

+1

@LeonGaban很高興幫助你..謝謝:) –

相關問題