【问题标题】:NodeJS - Waiting For Function to CompleteNodeJS - 等待功能完成
【发布时间】:2020-07-16 01:19:32
【问题描述】:

希望有人能提供帮助,我正在学习 NodeJS/Express.js 并且正在苦苦挣扎。

下面的代码输出两个变量的内容,但是有时 res.send 命令在第二个函数('city2')有时间完成之前启动。根据我在网上阅读的内容,我需要使用 await 命令来让第二个函数有时间完成,然后再执行剩余的代码。

此外,res.write 似乎不起作用,因为我想在显示变量之前输入标题 - 是否需要添加任何额外内容才能使 res.write 起作用?

非常感谢任何帮助 - 谢谢。

var express = require('express');
var app = express();
const https = require('https');
var peopleDB;
var peopleDB2;
var cityName;

app.get('/city/:query', city, (req, res) => {
    console.log(req.params.query);
})

async function city (req, res){
    cityName = req.params.query;
    var url = 'https://asdf-mytest-app.herokuapp.com/city/' + cityName + '/users';
    
    const request = https.get(url, response => {

        let body = "";
    
        response.on('data', data =>{
            body += data.toString();
        });
    
        response.on('end', () => {
            const people = JSON.parse(body);
            JSON.stringify(people);
            peopleDB = people;
        });
    });
    await city2();
    res.send({peopleDB,
        peopleDB2});
}

async function city2 (req, res){
    cityName = req.params.query;
    var url = 'https://asdf-mytest-app.herokuapp.com/city/' + cityName + '/users';
    
    const request = https.get(url, response => {

        let body = "";
    
        response.on('data', data =>{
            body += data.toString();
        });
    
        response.on('end', () => {
            const people = JSON.parse(body);
            JSON.stringify(people);
            peopleDB2 = people;
        });
    });
}

【问题讨论】:

    标签: node.js express async-await


    【解决方案1】:

    有几件事需要处理

    1. get 请求中应该有响应发送方法,如下所示,因此 nodeJS 正在等待该函数

      app.get('/city/:query', city, (req, res) => { console.log(req.params.query); res.send({}); });

    2. 其次,我假设您打算在第一点调用 city 方法并发送如下响应

      app.get('/city/:query', city, async (req, res) => { console.log(req.params.query); 常量数据 = 等待城市(); res.send({数据}); });

    3. 我可以看到 city2 做的事情几乎和 city1 做的一样。如果您需要在 city1 完成后调用 city2,则需要调用 await city2();在 response('end') 事件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多