首页 > 解决方案 > JS - HTTP 请求使用不同功能的结果

问题描述

我有一个使用以下代码从 URL 获取数据(字符串)的 GET 请求:

var https = require('https');
let urldata;

var options = {
    host: 'test.com',
    path: '/test.php'
}
var request = https.request(options, function (res) {
    let data = '';
    res.on('data', function (chunk) {
        data += chunk;
    });
    res.on('end', function () {
        urldata = data; 
        console.log(urldata);  //Returns the retrieved data from URL into console
    });
});
request.end();

现在我有第二个函数,它需要我从 Request abvoe 获得的数据:

async execute(message, args, Discord, client) {
    message.author.send(urldata);
}

问题在于第二个函数中的“urldata”是“未定义”,因为第一个是异步的并且还没有给出结果。我已经读到我必须使用“回调”或“承诺”才能在我的第二个函数中使用第一个函数的数据。我尝试过,但无法获得有效的结果。

如果有人可以帮助我将其重新编码为回调或承诺,那就太棒了,这样第一个函数的数据就可以用于第二个函数。

标签: javascript

解决方案


const urldata = await Promise(resolve => {
    var request = https.request(options, function (res) {
        let data = '';
        res.on('data', function (chunk) {
            data += chunk;
        });
        res.on('end', function () {
            resolve(data)
        });
    });
    request.end();
})

console.log(urldata);  //Returns the retrieved data from URL into console

// Now you can run the second function with "urldata" in it


推荐阅读