angular 1 promise call http 有效,但不适用于来自 json 结构的假数据,promise.then 不是函数

Posted

技术标签:

【中文标题】angular 1 promise call http 有效,但不适用于来自 json 结构的假数据,promise.then 不是函数【英文标题】:angular 1 promise call http works, but not with fake data from json structure , promise.then not a function 【发布时间】:2018-08-13 18:52:23 【问题描述】:

我有 angularjs 控制器,可以很好地返回 $http 数据,但我只需要返回一些硬编码的 json 结构数据,但我得到了 promise.then 不是一个函数。

好像没有返回,好像我需要另一个返回?

控制器:

 var promise = hearingFactory.getHearingSummary();

    promise.then(function (response) 
        vm.myData = response;
        console.log('getHearingSummary promise data', vm.myData);
    , function (err) 
        console.log('err', err);
    );

服务

var hearingFactory = function ($http) 
    var factory = ;

    factory.getHearingSummary = function () 

        var url = "";
        url = baseUrl + "lib/questions";
        url = "test.json"

        //WORKS

        return $http.get(url).then(function (result) 
            console.log('service',result.data);
            return result.data;

        );

       // DOESN"T work  ( I comment out the above code)

        return 
            "flightData": [
                
                    "MultiCarrier": false,
                    "Id": "O1"
                
            ] 

        

    

    return factory;

;
    我的控制器代码没有问题,整体服务代码也没有问题 似乎是.then for $http "works" 中的双重回报承诺 也许我需要对数据的 json 结构做出真正的“承诺”,如果需要,我将如何编写?

【问题讨论】:

【参考方案1】:

第一个“有效”,因为.then() 产生了一个承诺。您的第二个 return 语句返回一个普通对象,这不是一个承诺。你试图打电话给.then 不是承诺。

所以返回一个承诺:

return $q.when(
    "flightData": [
        
            "MultiCarrier": false,
            "Id": "O1"
        
    ] 
);

【讨论】:

@ScottLeary 如果您使用的是足够新版本的 AngularJS,但如果没有,您可以使用$q.when() @TomStickel 不,$q 是 AngularJS 的一部分。 @TomStickel q- 是另一回事。还有a promise library named Q。 AngularJS 中的$q 以后者命名,但与两者都没有直接关系。

以上是关于angular 1 promise call http 有效,但不适用于来自 json 结构的假数据,promise.then 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

Promise Chaining / Cascading to RxJS angular 1 to angular 2

angular ui-router 1.0.3 和 angular.js 1.6.4 似乎使用了错误的 Promise 类型?

Angular JS中 Promise用法

等待点击 Promise 完成的 Angular 指令

在Angular 2中拒绝Promise时未处理的Promise拒绝[重复]

Promise.all 的 then() 函数在 Promise 完成之前执行 - Ionic/Angular