从index.js调用函数时如何获得异步函数的完整值?
我是Node的新手,我正在尝试创建一个函数以分页进行API请求。该函数成功地为我提供了所需的输出,但是由于如何异步使用index.js中的.then()函数,我感到困惑。如果我在index.js中使用await,则会引发错误。我希望就如何解决此问题以及如何更好地理解异步/等待获得一些指导。
//hs-api.js
const request = require('request-promise');
const settings = require('./settings');
var all = []
let getReq = async (url) => {
var options = {
'method': 'GET',
'url': url,
'headers': {
'Content-Type': 'application/json'
}
}
let results = await request(options, function async (error, response) {
if (error) {
reject(error)
} else {
res = JSON.parse(response.body)
}
})
all = all.concat(res.results)
if(res.hasOwnProperty("paging")) {
await getReq(`${res.paging.next.link}&apikey=${settings.api_key}`)
} else {
console.log(all)
return all
}
}
这里是我调用函数的地方
//index.js
let apiResponse = api.getReq(`/?apikey=${settings.api_key}`)
console.log(apiResponse)
回答如下:截至今天(Node.js 14),您需要将其包装在一个函数中。
这样的东西
(async () => {
let apiResponse = await api.getReq(`https://apiexample/?apikey=${settings.api_key}`)
console.log(apiResponse)
})()
对于顶级proposal,有一个用于ES的await
,它将可以运行
let apiResponse = await api.getReq(`https://apiexample/?apikey=${settings.api_key}`)
console.log(apiResponse)
没有async
关键字。
Node.js(从版本10开始)对此功能提供了实验性支持。您需要使用--experimental-repl-await
标志运行它>