我简化了我的代码,这样你就可以帮我解决这个问题了。我试图在一个函数中调用一个函数,控制台说getId不是一个函数。我真的希望你能帮忙!
/* Get username */
let getUsername = function() {
return 'johndoe';
};
/* Get ID */
let getId = function() {
console.log(getUsername());
if (getUsername() == 'johndoe') {
return 1;
}
};
function getFollowerslist() {
console.log(getId());
return getId(getUsername);
};
console.log(getFollowerslist()); /* Error: getId is not a function */
编辑:
我简化代码时犯了一个错误。真正的问题并不是在我最初的声明中发现的问题。
问题是,我的函数getId()从Instagram URL中获取ID并返回它太晚了。
当我从getId()内部调用getFollowerslist()时,它会返回未定义的结果,因为getId()还没有结果。
/* Works every time */
let getId = function() {
fetch("https://www.instagram.com/johndoe/?__a=1", {properties})
.then(response => response.json())
.then(data => {
console.log('ID:' + data["graphql"]['user']['id']);
return data["graphql"]['user']['id'];
});
};
let getFollowers = function() {
/* undefined */
console.log('ID: ' + getId());
/* R<est of the function doesn't work because getId returns undefined */
};
console.log(getId()); /* Works!!! */
console.log(getFollowers()); /* undefined */发布于 2021-10-21 10:43:02
您只是没有填写参数;执行以下操作,它将运行:
let getUsername = function() {
return 'johndoe';
};
/* Get ID */
let getId = function(getUsername) {
if (getUsername() == 'johndoe') {return 1;}
};
function getFollowerslist(getId, getUsername) {
return getId(getUsername);
};
console.log(getFollowerslist(getId, getUsername));
您在函数getFollowerslist中使用了getFollowerslist,但在调用函数时没有传递它,因此,getId最终成为了undefined。正如您所看到的,undefined不是一个函数。
如果在声明getFollowerslist函数时参数部分保持为空,那么getId和getUsername就不会被覆盖,并且会正常工作。见下文:
let getUsername = function() {
return 'johndoe';
};
/* Get ID */
let getId = function(getUsername) {
if (getUsername() == 'johndoe') {return 1;}
};
function getFollowerslist() {
return getId(getUsername);
};
console.log(getFollowerslist());
编辑:
既然你修改了你的问题,下面是我编辑过的答案
let getId = async function() {
let response = await fetch("https://www.instagram.com/johndoe/?__a=1",{ properties })
response = response.json()
return response;
};
let getFollowers = async function() {
console.log('ID: ' + await getId());
};
console.log(getId()); /* Works!!! */
console.log(getFollowers()); /* undefined */
我设法得到了你的回应,但由于我似乎有一些CORS的问题,我不知道这是否是你想要的。您需要修改代码(例如,return response,它只返回响应,对我来说,这似乎就是{})。对您来说,似乎需要将其更改为return response["graphql"]['user']['id']。
发布于 2021-10-21 10:52:51
问题很简单:函数和参数使用相同的名称。
在此功能范围内:
function getFollowerslist(getId, getUsername) {
console.log(typeof getId); //writes undefined
return getId(getUsername);
};
console.log(typeof getId); //writes "function"..。名称"getId“指的是参数(而不是全局函数)。在这个函数之外,"getId“是一个函数。
只需更改参数名,使它们与函数不匹配。
https://stackoverflow.com/questions/69660354
复制相似问题