简体   繁体   English

角度-工厂应从第三方回调中返回值

[英]Angular - factory should return value from 3rd party callback

I am currently trying to write an angular service to handle a third party API. 我目前正在尝试编写角度服务来处理第三方API。 The API object handles everything. API对象处理所有事情。 You just create the object, call a function on it, and get a payload. 您只需创建对象,在其上调用一个函数,并获得有效负载。 When I step through the service function in the debugger, I can see the JSON response inside the findRole function, but then it errors out on: 当我逐步调试器中的service函数时,我可以在findRole函数中看到JSON响应,但是随后出错:

TypeError: Cannot read property 'then' of undefined

Any ideas of how to make this work? 关于如何进行这项工作的任何想法?

Module 模组

var angular = require('angular'),
    govtracksvc = require('./rep.service'),
    Rep = require('./Rep'),
    govtrack = require('govtrack-node');

angular.module('RepresentativeApp', [])
    .value('govtrack', govtrack)
    .factory('govtracksvc', govtracksvc)
    .controller('Rep', Rep);

module.exports = angular.module('RepresentativeApp');

Controller 控制者

module.exports = function Rep (govtracksvc) {
    var rep = this;
    rep.list = govtracksvc.findRole(rep.govtrack);
};

Service 服务

module.exports = function govtracksvc(govtrack) {
    var rep = this;
    var data = {};
    govtrack.findRole({current: true}, function (err, res) {
        if (err) {
            console.log('err: ', err);
        }
        return res;
    }).then(function (res) {
        data = res.objects;
    });
    return data;
};

Here is the endpoint, should anyone want to see the data: https://www.govtrack.us/api/v2/role/?current=true 这是端点,任何人都想查看数据时: https : //www.govtrack.us/api/v2/role/?current=true

Here is the code sample using callback, see if it suits your need: 这是使用回调的代码示例,请查看它是否适合您的需求:
Module 模组

var angular = require('angular'),
govtracksvc = require('./rep.service'),
Rep = require('./Rep'),
govtrack = require('govtrack-node');

angular.module('RepresentativeApp', [])
    .value('govtrack', govtrack)
    .factory('govtracksvc', govtracksvc)
    .controller('Rep', Rep);

module.exports = angular.module('RepresentativeApp');

Controller 控制者

module.exports = function Rep (govtracksvc, $scope) {
    var rep = this;
    govtracksvc.findRole(rep.govtrack, function(result){
        rep.list = result;
        if(!$scope.$$phase){
            $scope.$apply();
        }
    });
};

Service 服务

module.exports = function govtracksvc(govtrack, callback) {
var rep = this;
govtrack.findRole({current: true}, function (err, res) {
    if (err) {
        console.log('err: ', err);
        return {};
      }
    return res.objects;
    });
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM