我正在尝试异步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("https://httpbin.org/post");
return response;
}
function showData(data)
{
console.log(data);
}
运行app.js可获得“未定义”结果。 如果我改变了;
var response=login();
到
var response=await login();
我收到错误消息“等待仅在异步函数中有效”
答案 0 :(得分:0)
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.org/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
定义了变量的声明。您也可以执行以下操作:
我正在尝试异步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
}