最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何让异步WebRequest的结果,并使用该结果在另一个的NodeJS功能

运维笔记admin9浏览0评论

如何让异步WebRequest的结果,并使用该结果在另一个的NodeJS功能

如何让异步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因为你已经awaiting变量的声明。你可能也只是做到以下几点:

我想异步的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
}
发布评论

评论列表(0)

  1. 暂无评论