#javascript #node.js #asynchronous #get #request
Вопрос:
Я пытаюсь выполнить запрос на получение в node.js. Я хотел бы получить доступ к результату запроса, но есть проблема. Вот код :
const https = require('https');
var data;
https.get('https://www.example.com', (resp) => {
resp.on('data', (chunk) => {
data = chunk;
});
resp.on('end', () => {
console.log("Inside : " data "n");
});
}).on("error", (err) => {
console.log("Error: " err.message);
});
console.log("Outside : " data "n");
Внешнее сообщение появляется перед внутренним, и только последнее отображает запрос. Я думаю, это связано с асинхронным процессом. Но если я хочу использовать свой запрос снаружи, это проблема из-за этой задержки.
Как я могу это сделать?
Комментарии:
1. вы должны использовать async/await. этот веб-сайт поможет вам начать работу: nodejs.dev/learn/…
Ответ №1:
Ваш код выполняет asyncronymos. http.get(…) выполняется, но программа не ждет результата вашего get. Поэтому, когда вы делаете «console.log(«Снаружи : » данные «n»);» — ваши данные пусты. Вы никогда не получите данные во внешнее сообщение без конструкций js, таких как async/await.
Ответ №2:
Это то, что вам нужно:
(async function () {
const https = require('https');
var data;
await new Promise((resolve, reject) => {https.get('https://www.example.com', (resp) => {
resp.on('data', (chunk) => {
data = chunk;
});
resp.on('end', () => {
console.log("nn===>Inside : " data "n");
resolve();
});
}).on("error", (err) => {
console.log("Error: " err.message);
reject();
});
});
console.log("nn===>Outside : " data "n");
})();
Ответ №3:
Спасибо, что ответили. После поисков я сделал это, что сработало, но я не знаю, лучший ли это способ сделать это.
const https = require('https');
var data;
(async function () {
var p = new Promise((resolve) => {https.get('https://www.example.com', (resp) => {
resp.on('data', (chunk) => {
data = chunk;
});
resp.on('end', () => {
console.log("nn===>Inside : " data "n");
resolve();
});
}).on("error", (err) => {
console.log("Error: " err.message);
});
});
await p;
console.log("nn===>Outside : " data "n");
})();