javascript - Angular Promise,为什么在这种情况下我会得到 'then' 的未定义?

标签 javascript angularjs asynchronous promise angular-promise

我的图表指令中有一个函数,它调用服务中的函数来获取数据,格式化该数据,然后从我的图表指令中调用另一个函数:

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 .

最佳答案

Promise 应该直接从代码返回,而不应该从它的 .then 回调返回。简而言之,您尚未从函数返回 Promise,并且正在寻找 .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;

关于javascript - Angular Promise,为什么在这种情况下我会得到 'then' 的未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33219799/

相关文章:

angularjs - angularjs 中的 $ctrl 是什么?什么时候在 View 中使用 $ctrl vs $scope?

时间:2019-03-07 标签:c#awaitabletask留在相同的上下文中

c# - WaitAll 和 WhenAll 有什么区别?

javascript - 重新加载 JS 文件而不刷新页面

php - 这个 Ajax 可以与调试(Firebug)一起使用,但也不能没有它

angularjs - 如何将 Passport 与 Angular Node 应用程序一起使用?

javascript - cucumber 和 Protractor 有什么区别?

javascript - 尝试在第一次单击后保留的表格内创建下拉菜单

javascript - Silverstripe 要求组合文件 CSS 和 JS

javascript - Node 的模块 async 没有按预期工作