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 类型?