我似乎无法弄清楚为什么我 console.log 在 async/await 函数之后得到一个值之后我得到 'undefined'
I can't seem to figure out why I get 'undefined' after I console.log a value after an async/await function
我是 Node JS 的新手,我似乎无法弄清楚为什么我在使用异步函数时会收到 'undefined'。我已经将异步函数包装在一个承诺中,它会在 API 请求完成后解析。
let req = (url) => new Promise((resolve, reject) => {
var options = {
'method': 'GET',
'url': url,
'headers': {
'Content-Type': 'application/json'
}
}
request(options, function (error, response) {
if (error) {
reject(error)
} else {
resolve(response.body)
}
})
})
.then((results) => {
//console.log(results) //this shows the results when uncommented!
console.log('request has been completed')
})
.catch((error) => {
console.log(error)
})
这是触发 'req' 函数然后在我记录值时说 'undefined' 的函数:
let getAllData = async (url) => {
var endpoint = `${url}?apikey=${settings.api_key}`
let res = await req(endpoint)
console.log('run after request') //successfully runs after request is resolved above
console.log(res) //gives me 'undefined'
}
这是我的输出。
request has been completed
run after request
undefined
我做错了什么?
Return 您的 then
中的一个值或删除 then 和 catch 块并在您使用 await 调用 promise 时执行此操作:
let res = await req(endpoint).catch(err => console.log(err));
您正在使用 .then / .catch 作为函数定义的一部分 - 这没有意义。这些构造应该用作函数执行的一部分。
像这样定义你的函数:
let req = (url) => new Promise((resolve, reject) => {
var options = {
'method': 'GET',
'url': url,
'headers': {
'Content-Type': 'application/json'
}
}
request(options, function (error, response) {
if (error) {
reject(error)
} else {
resolve(response.body)
}
})
})
然后,在执行时,你这样做:
let getAllData = async (url) => {
var endpoint = `${url}?apikey=${settings.api_key}`
let res = await req(endpoint)
console.log('run after request')
console.log(res) // should give response.body
}
或者你这样做:
let getAllData = async (url) => {
return new Promise((resolve, reject) => {
var endpoint = `${url}?apikey=${settings.api_key}`
req(endpoint)
.then(res => {
console.log('run after request')
console.log(res) // should give response.body
resolve(res)
})
.catch(err => {
console.error(err)
reject(err)
})
})
}
基本上,定义函数然后...用 async/await 语法调用它,或者用 promise 风格的 .then/.catch 语法调用它。
我是 Node JS 的新手,我似乎无法弄清楚为什么我在使用异步函数时会收到 'undefined'。我已经将异步函数包装在一个承诺中,它会在 API 请求完成后解析。
let req = (url) => new Promise((resolve, reject) => {
var options = {
'method': 'GET',
'url': url,
'headers': {
'Content-Type': 'application/json'
}
}
request(options, function (error, response) {
if (error) {
reject(error)
} else {
resolve(response.body)
}
})
})
.then((results) => {
//console.log(results) //this shows the results when uncommented!
console.log('request has been completed')
})
.catch((error) => {
console.log(error)
})
这是触发 'req' 函数然后在我记录值时说 'undefined' 的函数:
let getAllData = async (url) => {
var endpoint = `${url}?apikey=${settings.api_key}`
let res = await req(endpoint)
console.log('run after request') //successfully runs after request is resolved above
console.log(res) //gives me 'undefined'
}
这是我的输出。
request has been completed
run after request
undefined
我做错了什么?
Return 您的 then
中的一个值或删除 then 和 catch 块并在您使用 await 调用 promise 时执行此操作:
let res = await req(endpoint).catch(err => console.log(err));
您正在使用 .then / .catch 作为函数定义的一部分 - 这没有意义。这些构造应该用作函数执行的一部分。
像这样定义你的函数:
let req = (url) => new Promise((resolve, reject) => {
var options = {
'method': 'GET',
'url': url,
'headers': {
'Content-Type': 'application/json'
}
}
request(options, function (error, response) {
if (error) {
reject(error)
} else {
resolve(response.body)
}
})
})
然后,在执行时,你这样做:
let getAllData = async (url) => {
var endpoint = `${url}?apikey=${settings.api_key}`
let res = await req(endpoint)
console.log('run after request')
console.log(res) // should give response.body
}
或者你这样做:
let getAllData = async (url) => {
return new Promise((resolve, reject) => {
var endpoint = `${url}?apikey=${settings.api_key}`
req(endpoint)
.then(res => {
console.log('run after request')
console.log(res) // should give response.body
resolve(res)
})
.catch(err => {
console.error(err)
reject(err)
})
})
}
基本上,定义函数然后...用 async/await 语法调用它,或者用 promise 风格的 .then/.catch 语法调用它。