Javascript Node.js从匿名函数访问值
早上好 我一直在努力获取函数返回的特定值:Javascript Node.js从匿名函数访问值,javascript,node.js,anonymous-function,scoping,Javascript,Node.js,Anonymous Function,Scoping,早上好 我一直在努力获取函数返回的特定值: const getFolders = function (PID){ var token = getStoredToken() request.get({ url: 'https://api.procore.com/vapid/folders', headers: { Authorization: "Bearer " + token.access_token }, json: { com
const getFolders = function (PID){
var token = getStoredToken()
request.get({
url: 'https://api.procore.com/vapid/folders',
headers: {
Authorization: "Bearer " + token.access_token
},
json: {
company_id: '12594',
project_id: PID
}
}, function test(err, response, body){
return body
})
// I NEED THE RETURN VALUE OF THE ABOVE FUNCTION HERE SO I CAN ACCESS WHEN CALLING getFolders()
}
这可能吗?如果是,怎么做
谢谢 您所期望的方式是错误的,您传递给request.get方法的测试函数是一个回调函数,它将以非同步方式执行,这意味着无论何时您的API从服务器响应,该回调函数都将得到执行 因此在此之前,您期望的是请求方法下面的响应(主体),这是错误的 在这种情况下,您只需编写一些其他函数来调用这个get方法,在回调函数中,您可以轻松访问该响应,或者只需在测试函数本身中编写代码 如下图-:
request.get({
url: 'https://api.procore.com/vapid/folders',
headers: {
Authorization: "Bearer " + token.access_token
},
json: {
company_id: '12594',
project_id: PID
}
}, function test(err, response, body){
// instead of returning body
// use the body here only
let result = body;
// your code here
})
或者另一种方式-:
const getFolders = function (PID){
var token = getStoredToken();
this.get(function(err, response, body){
// do whatever you want with the response now
updateFolder()
})
}
function get(callback){
request.get({
url: 'https://api.procore.com/vapid/folders',
headers: {
Authorization: "Bearer " + token.access_token
},
json: {
company_id: '12594',
project_id: PID
}
}, callback)
}
您所期望的方式是错误的,您传递给request.get方法的测试函数是一个回调函数,它将以异步方式执行,这意味着无论何时API从服务器响应,该回调函数都将得到执行 因此在此之前,您期望的是请求方法下面的响应(主体),这是错误的 在这种情况下,您只需编写一些其他函数来调用这个get方法,在回调函数中,您可以轻松访问该响应,或者只需在测试函数本身中编写代码 如下图-:
request.get({
url: 'https://api.procore.com/vapid/folders',
headers: {
Authorization: "Bearer " + token.access_token
},
json: {
company_id: '12594',
project_id: PID
}
}, function test(err, response, body){
// instead of returning body
// use the body here only
let result = body;
// your code here
})
或者另一种方式-:
const getFolders = function (PID){
var token = getStoredToken();
this.get(function(err, response, body){
// do whatever you want with the response now
updateFolder()
})
}
function get(callback){
request.get({
url: 'https://api.procore.com/vapid/folders',
headers: {
Authorization: "Bearer " + token.access_token
},
json: {
company_id: '12594',
project_id: PID
}
}, callback)
}
通常有三种方法处理异步内容:
- 回拨
- 允诺
- 异步/等待
const getFolders=函数(PID,回调){
var token=getStoredToken()
请求({
网址:'https://api.procore.com/vapid/folders',
标题:{
授权:“承载人”+令牌。访问令牌
},
json:{
公司id:'12594',
项目编号:PID
}
},功能(错误、响应、正文){
回调(正文)
})
}
getFolders(pid,(v)=>{
控制台日志(v)
})
承诺:
const getFolders=函数(PID,回调){
返回新承诺((解决、拒绝)=>{
var token=getStoredToken()
请求({
网址:'https://api.procore.com/vapid/folders',
标题:{
授权:“承载人”+令牌。访问令牌
},
json:{
公司id:'12594',
项目编号:PID
}
},功能(错误、响应、正文){
如果(错误){
退货拒绝(err)
}
决议(正文)
})
})
}
getFolders(pid)
.然后(v=>{
控制台日志(v)
}).catch(错误=>{
控制台错误(错误)
})
异步/等待:
由于async/await实际上是一种语法糖,因此getFolders
函数与使用promise的函数相同,不同之处在于调用它时:
(异步函数(){
试一试{
让v=等待getFolders(pid)
控制台日志(v)
}捕获(e){
控制台错误(e)
}
})()
不确定这是否能解决您的困惑。通常有三种方法来处理异步内容:
- 回拨
- 允诺
- 异步/等待
const getFolders=函数(PID,回调){
var token=getStoredToken()
请求({
网址:'https://api.procore.com/vapid/folders',
标题:{
授权:“承载人”+令牌。访问令牌
},
json:{
公司id:'12594',
项目编号:PID
}
},功能(错误、响应、正文){
回调(正文)
})
}
getFolders(pid,(v)=>{
控制台日志(v)
})
承诺:
const getFolders=函数(PID,回调){
返回新承诺((解决、拒绝)=>{
var token=getStoredToken()
请求({
网址:'https://api.procore.com/vapid/folders',
标题:{
授权:“承载人”+令牌。访问令牌
},
json:{
公司id:'12594',
项目编号:PID
}
},功能(错误、响应、正文){
如果(错误){
退货拒绝(err)
}
决议(正文)
})
})
}
getFolders(pid)
.然后(v=>{
控制台日志(v)
}).catch(错误=>{
控制台错误(错误)
})
异步/等待:
由于async/await实际上是一种语法糖,因此getFolders
函数与使用promise的函数相同,不同之处在于调用它时:
(异步函数(){
试一试{
让v=等待getFolders(pid)
控制台日志(v)
}捕获(e){
控制台错误(e)
}
})()
不确定这是否解决了您的困惑。这是否回答了您的问题?返回。。。。为什么?只需对回调中的数据执行您需要执行的操作(例如,调用任何知道如何在那里使用它的函数)?另外,让getFolders调用getFolders听起来是个非常糟糕的主意。这能回答你的问题吗?返回。。。。为什么?只需对回调中的数据执行您需要执行的操作(例如,调用任何知道如何在那里使用它的函数)?另外,让getFolders调用getFolders听起来是个非常糟糕的主意。