Javascript Node js,为什么我的函数不是函数?
我试图构建一个后端脚本来调用recurly api来加载数据并存储它。我声明该函数并将其分配给getAccountInfo,之后我尝试调用该函数,但控制台显示getAccountInfo不是函数。。 还有console.log(accountInfo)显示未定义。但我可以在函数声明中看到它 api参数需要回调函数,这就是它看起来像这样的原因Javascript Node js,为什么我的函数不是函数?,javascript,node.js,Javascript,Node.js,我试图构建一个后端脚本来调用recurly api来加载数据并存储它。我声明该函数并将其分配给getAccountInfo,之后我尝试调用该函数,但控制台显示getAccountInfo不是函数。。 还有console.log(accountInfo)显示未定义。但我可以在函数声明中看到它 api参数需要回调函数,这就是它看起来像这样的原因 var accountInfo = {}; let getAccountInfo = recurly.accounts.list(function (e
var accountInfo = {};
let getAccountInfo = recurly.accounts.list(function (errResponse, response) {
if (errResponse) {
reject(errResponse);
}
if (response) {
accountInfo = response.data.accounts.account;
resolve(response);
}
}, );
getAccountInfo();
console.log(accountInfo);
我希望我可以运行该函数并获取accountInfo。我不熟悉javascript和NodeJS,这是我误解的概念吗?非常感谢您的帮助。
getAccountInfo
是递归的accounts.list()
返回的内容,它不是一个函数(因为它是一个异步函数,所以可能不会返回任何内容,或者可能会返回一个承诺)。您需要自己定义一个函数:
function getAccountInfo() {
recurly.accounts.list(function(errResponse, response) {
if (errResponse) {
reject(errResponse);
}
if (response) {
accountInfo = response.data.accounts.account;
resolve(response);
}
});
}
请注意,console.log(accountInfo)
不会打印结果,因为该函数是异步的。有关构造代码以便使用结果的正确方法,请参阅
我声明函数并将其分配给getAccountInfo
不,你不是那样做的。您重新调用了函数recurly.accounts.list(),并将getAccountInfo设置为它返回的值。由于它是一个异步函数,它可能几乎立即返回,很有可能没有返回任何内容,并且getAccountInfo设置为undefined
此外,在代码中未定义拒绝和解析。我会这样做的
function getAccountInfo() {
return new Promise((resolve, reject) => {
recurly.accounts.list((errResponse, response) => {
if (errResponse) {
return reject(errResponse);
}
resolve(response);
}, );
});
}
当您调用getAccountInfo()时,它会返回一个承诺,因此您必须等待它得到解决
getAccountInfo()
.then(response => {
accountInfo = response.data.accounts.account;
console.log(accountInfo);
})
.catch(err => console.log(err));
链接到
recury.accounts.list()
的文档可能会有所帮助。它起作用了!我要学习更多关于承诺的知识。非常感谢。先生,我还有一个问题,那么accountInfo只在范围内可用吗?如果我想将accountInfo保存到外部作用域,以便其他函数都可以访问它,该怎么办?您可以将accountInfo分配给作用域之外的变量,我的大脑不会允许我这样做。:-)但是,请记住,外部脚本已经完成,因此必须从then块中使用accountInfo。通常,您调用另一个函数,该函数执行任何工作。您可以将accountInfo分配给全局变量或传递给其他函数。我有过线程安全编码的经历,所以我总是到处传递东西,从不使用globals。