如何获取异步webrequest结果并在Node.js中使用结果

时间:2019-02-06 12:25:11

标签: node.js async-await webrequest

我正在尝试异步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();

我收到错误消息“等待仅在异步函数中有效”

1 个答案:

答案 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
}