gpt4 book ai didi

Javascript:函数字典;字典中的一个函数调用另一个

转载 作者:行者123 更新时间:2023-11-29 22:59:00 28 4
gpt4 key购买 nike

我有一个函数字典,这些函数本质上是对我用来接收数据的 API 的不同调用(在 promise 中)。我的 API 构建其数据的方式,为了从每个国家/地区获取每个物种,我必须调用 API 修改 https 请求,使用特定于每个国家/地区的关键字 q。我在名为 sp_b_c 的字典中创建了一个函数,它表示按国家/地区划分的物种。它需要一个 q,这是国家/地区,调用本身会返回一个 promise ,其中包含该国家/地区内所有物种的 promise 值。

我想在字典中创建另一个功能,它允许我从每个国家/地区获取所有物种,以便将其全部包含以备后用。

我试图做的是创建一个名为 sp_b_c_all 的新函数。我调用字典中的 country_list 函数来获取所有国家/地区。然后我遍历每个国家并将每个国家传递给函数 sp_b_c。我创建了一个数组 sp_b_c_entire,它本质上就像一个 Promise.all,因为所有通过遍历国家并将每个国家传递给 sp_b_c 的调用所收到的 promise 会导致一个返回的 promise 。

然而,当调用 getData("accesses", "sp_b_c_all")] 时,我收到以下错误:

script.js:38 Uncaught TypeError: country_li.then is not a function
at Object.accesses.sp_b_c_all (script.js:38)
at getData (script.js:68)
at initialization (script.js:194)
at script.js:365

下面是这里引用的代码:

var getData = function(set, target, q, ...manyMore) {
var pack = [];
// ~ USE rest parameters instead, grab array from ...

// set accesses
var api_token = "9d34bf3f79ae6a8b88c4f1f54ffc3e64e5f4cdcc2cc47bd1cf429e7e247d94b2";
var accesses = new Object();
var alternative = new Object();

// ~ do a promise all, might be overload for API, so limitations
if (set == "accesses") {
accesses.sp_b_c = function(q) {
return d3.json("https://apiv3.iucnredlist.org/api/v3/country/getspecies/"+ q +
"?token=9d34bf3f79ae6a8b88c4f1f54ffc3e64e5f4cdcc2cc47bd1cf429e7e247d94b2")
.then(function(d) { return d; });
}

accesses.sp_b_c_all = function() {
sp_b_c_entire = [];
console.log(accesses.sp_b_c("AE"))
var country_li = accesses.country_list;
country_li.then(function(countries) {
console.log(countries);
countries.forEach(function(country) {
sp_b_c_entire.push(accesses.sp_b_c(country));
})
})
return sp_b_c_entire;
}

accesses.country_list = function() {
return d3.json("https://apiv3.iucnredlist.org/api/v3/country/list?token="+api_token)
.then(function(d) { return d; });
}
accesses.comp_group_list = function() {
return d3.json("https://apiv3.iucnredlist.org/api/v3/comp-group/list?token="+api_token)
.then(function(d) { return d; });
}
accesses.comp_group_specific = function() {
return d3.json("https://apiv3.iucnredlist.org/api/v3/comp-group/getspecies/"+ key +"?token="+api_token)
.then(function(d) { return d; });
}
accesses.threats_regional = function() {
return d3.json("http://apiv3.iucnredlist.org/api/v3/threats/species/name/Ursus%20maritimus/region/europe?token="+api_token)
.then(function(d) { return d; });
}
accesses.threats_global = function() {
return d3.json("http://apiv3.iucnredlist.org/api/v3/threats/species/name/Loxodonta%20africana?token="+api_token)
.then(function(d) { return d; });
}

return accesses[target]();
}
// alternative threat dataset
else if (set == "csv") {
var data = d3.csv(target + ".csv");
var transformation = data.then(
function(d) {
var container = d.map(function(d) {
return {s_n: d.ScientificName,
c_n: d.CommonName,
state: d.States,
group: d.group};
});
pack.push(container);
} // end of anon/callback function
); // end of then function
return data;
} // end of else if conditional


};

我曾想,如果我从 accesses.sp_b_c_all 中调用 accesses.country_list,我会收到国家列表的 promise 。然后我利用 then() 访问 promise 值。在 then(countries) 中,countries 是数据集(国家列表。这是我使用 forEach 循环遍历 countries 中的每个国家的地方,然后我使用国家参数将每个国家传递到 accesses.sp_b_c 的 api 调用中。由此,我希望收到一个 promise ,然后将其存储在数组中。

我做错了什么,我该如何解决?也许我应该如何改变我的思考过程?

最佳答案

如果 country_li 是一个返回 promise 的函数,你需要先调用它来获得 promise :

country_li().then(function(countries) {...})

关于Javascript:函数字典;字典中的一个函数调用另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56013971/

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