如何让异步WebRequest的结果,并使用该结果在另一个的NodeJS功能
我想异步的WebRequest,我想在另一个函数中使用返回的数据。
request.js
var fetch = require('node-fetch')
async function postAsync(url)
{
var response =await fetch(url,
{
method: "POST",
headers: {
'Content-Type': 'application/json',
'User-Agent': 'AirPlay/320.20',
'Connection': 'keep-alive'
},
body: {},
encoding: null
});
return await response;
}
module.exports = {
postAsync
}
app.js
var request = require('./request');
var response=login();
showData(response.data);
async function login()
{
var response=await request.postAsync("");
return response;
}
function showData(data)
{
console.log(data);
}
运行app.js得到“未定义”的结果。如果我改变;
var response=login();
至
var response=await login();
我得到错误“等待是必须在异步功能有效”
回答如下:Node.js的目前不允许异步函数之外的顶级await
。此外,它看起来并不像被在范围和async
的背景下异步执行app.js
功能,没有什么让节点进程知道等待login()
完成。
请尝试以下
在app.js
const request = require('./request');
// Immediately invoke the async function
const login = (async function() {
const response = await request.postAsync("https://httpbin/post");
// You could just do showData(response.data) here if your goal is just to log it
return response;
})();
var response = showData(response.json());
function showData(data) {
console.log(data);
}
此外,在您的request.js
文件,它并没有真正意义的return await response
因为你已经await
ing变量的声明。你可能也只是做到以下几点:
我想异步的WebRequest,我想在另一个函数中使用返回的数据。
request.js
var fetch = require('node-fetch')
async function postAsync(url) {
return await fetch(url,
{
method: "POST",
headers: {
'Content-Type': 'application/json',
'User-Agent': 'AirPlay/320.20',
'Connection': 'keep-alive'
},
body: {},
encoding: null
});
}
module.exports = {
postAsync
}