gpt4 book ai didi

javascript - Angular Service "Unable to get property ' then' 未定义或空引用”

转载 作者:行者123 更新时间:2023-12-01 03:42:38 25 4
gpt4 key购买 nike

您好,我不知道如何返回服务的正确功能/部分,因为它是由于 Yammer API 而进行分页的。

我已阅读文档并尝试返回整个函数,但我花了很长时间在它上面,我开始绝望,请帮助我。

我认为返回在错误的地方 - 我收到错误:

"Unable to get property 'then' of undefined or null reference"

我的 Controller

app.controller("mainController", function($scope, $http, yammerREST) {

$scope.getYammerPosts = function () {
yammerREST.getYammerData($scope.yammerURL).then(function(data) {
$scope.results = data.results;
});
};
});

我的服务

app.service("yammerREST", function($http) {
this.getYammerData = function(url) {

var groupID = url.split("feedId=")[1];
console.log(groupID);
var baseURL = "https://www.yammer.com/api/v1/messages/in_group/" + groupID + ".json?threaded=true";
var url = baseURL;
var results = [];

getPosts();

function getPosts () {
return $http({
url: url,
method: "GET",
headers: { "Accept": "application/json; odata=verbose" }
}).then(function(response) {
results = results.concat(response.data.messages);
console.log(results);

if (response.data.meta.older_available == true) {
url = baseURL + "&older_than=" + results[results.length-1].id;
getPosts();
};

return {
yammerListName: response.data.meta.feed_name,
results: results,
};
}).catch(function(e){
console.log("Error: ", e);
});
};
};
});

最佳答案

“Unable to get property 'then' of undefined or null reference”

该错误消息通常意味着该函数未能 return promise :

app.service("yammerREST", function($http) {
this.getYammerData = function(url) {

var groupID = url.split("feedId=")[1];
console.log(groupID);
var baseURL = "https://www.yammer.com/api/v1/messages/in_group/" + groupID + ".json?threaded=true";
var startURL = baseURL;
var results = [];

//vvvv RETURN promise
return getPosts(baseURL,startURL);

function getPosts (baseURL, url) {
//vvvv RETURN promise
return $http({
url: url,
method: "GET",
headers: { "Accept": "application/json; odata=verbose" }
}).then(function(response) {
results = results.concat(response.data.messages);
console.log(results);

if (response.data.meta.older_available == true) {
var nextURL = baseURL + "&older_than=" + results[results.length-1].id;
//vvvv RETURN promise
return getPosts(baseURL,nextURL);
};

return {
yammerListName: response.data.meta.feed_name,
results: results,
};
}).catch(function(e){
console.log("Error: ", e);
//IMPORTANT to re-throw error
throw e;
});
};
};
});

正在递归调用 getPosts 函数。为了进行有效的递归,f(x) 必须调用 f(x+1) 直到满足某个结束条件。

此外,在 .catch block 中,re-throw errors 也很重要。为了跳过 promise 链中的后续 .then block 。

关于javascript - Angular Service "Unable to get property ' then' 未定义或空引用”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43763926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com