0

我对 Angular 比较陌生,并试图纠正一些人留给我们的功能。我有一个从另一个服务中检索 JSON 的服务,然后我想在原始服务中使用该 JSON。从返回的 JSON 中访问单个值时,我让它工作,但我想存储整个对象,以便我可以轻松地在整个过程中引用它。

例如,这可行,并将 title (title: cfgTitle) 的值设置为从 JSON 返回的 TITLE 值:

.service("rtmModel", function($q, dataGetter, $http) {
    this.getModel = function() {
        var cfgProm = dataGetter.getData()
        var cfgTitle = cfgProm.then(function(response) {
            return response.data.record1.TITLE;
        });
        return {
            title: cfgTitle,
            desc: 
            ...

但是,如果我从“then”函数返回任何其他内容,我将无法显示内容。例如,这不起作用(似乎为标题参数传递了 undefined ):

.service("rtmModel", function($q, dataGetter, $http) {
    this.getModel = function() {
        var cfgProm = dataGetter.getData()
        var cfgTitle = cfgProm.then(function(response) {
            return response.data.record1;
        });
        return {
            title: cfgTitle.TITLE,
            desc: 
            ...

如果我只是从“then”函数返回“response”并执行以下操作:

         return {
        title: cfgTitle.

然后我将整个 JSON 字符串传递到 Title 中(我明白为什么),但尝试向下钻取(即标题:cfgTitle.data 或标题:cfgTitle.data.record1)只会导致未定义的值。

我尝试了各种存储返回的 JSON 数据的方法,但找不到允许我存储 JSON 对象的秘诀,然后用它在下面传递多个参数(即我想将一个值传递给标题,另一个进入 desc,依此类推)。

任何指针将不胜感激。

4

1 回答 1

0

您不能从传递给 promise 的 .then 方法的匿名函数回调中返回值/对象。这些回调由 Promise 库在内部调用,返回值被忽略。你有两个选择。从 getModel 引用对新对象的引用,并将 getData 返回的数据复制到其中。或者,从您的 getModel 方法返回一个新的承诺,并在解决从 getData 返回的承诺时解决该承诺。

后面的选项(向调用者返回一个承诺)看起来像这样(不会编译):

.service("rtmModel", function($q, dataGetter, $http) {
this.getModel = function() {
    var defer = $q.defer();
    dataGetter.getData().then(function(response) {
        defer.resolve(response.data.record1);
    });
    return defer.promise;
于 2014-01-14T04:38:00.787 回答